ruMoonGuard

Untitled

Nov 29th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.10 KB | None | 0 0
  1. ALTER PROCEDURE [vacancies].[NannyVacancies]
  2.     @UserType INT = NULL,
  3.     @UserId uniqueidentifier = NULL,
  4.     @VacancyLabelType INT = NULL,
  5.  
  6.     @RowIndex INT = 0,
  7.     @PageSize INT = 20,
  8.     @RowCount INT output,
  9.  
  10.     @SortOrder INT = 3,
  11.  
  12.     @Kind tinyint = 2,
  13.     @Regions IntegersTable readonly,
  14.     @Region INT = NULL,
  15.     @LANGUAGE INT = NULL,
  16.  
  17.     @Radius tinyint = NULL,
  18.  
  19.     @DistrictId INT = NULL,
  20.     @AreaId INT = NULL,
  21.     @DaysAgo tinyint = NULL,
  22.     @IncludeAgencyVacancies bit = NULL,
  23.  
  24.     @NannyInhabitancies BIGINT = NULL,
  25.     @NannyChildMaxCount INT = NULL,
  26.  
  27.     @SalaryByAgreement bit = NULL,
  28.     @NannyMinHourlySalary INT = NULL,
  29.     @NannyMaxHourlySalary INT = NULL
  30.  
  31. AS
  32. BEGIN
  33.     SET nocount ON;
  34.  
  35.     DECLARE @OrderByDate INT = 3
  36.     DECLARE @SearchCenter geography
  37.  
  38.     IF (@Radius IS NOT NULL)
  39.         SET @SearchCenter = vacancies.GetDistrictPoint(@DistrictId)
  40.  
  41.     DECLARE @labels TABLE (VacancyId INT NOT NULL PRIMARY KEY)
  42.  
  43.     INSERT INTO @labels
  44.         SELECT * FROM vacancies.GetLabels(@UserId, @VacancyLabelType)
  45.  
  46.     DECLARE @vacancies TABLE (VacancyId INT NOT NULL PRIMARY KEY)
  47.  
  48.     INSERT INTO @vacancies
  49.         SELECT VacancyId
  50.         FROM vacancies.Vacancies WITH (nolock)
  51.         WHERE
  52.             Kind = @Kind
  53.             AND EXISTS (SELECT 1 FROM @Regions WHERE VALUE = Region)
  54.             AND (@LANGUAGE IS NULL OR LANGUAGE = @LANGUAGE)
  55.             AND (@AreaId IS NULL OR AreaId = @AreaId)
  56.            
  57.             AND (@SearchCenter IS NOT NULL OR @DistrictId IS NULL OR DistrictId = @DistrictId)
  58.             AND (@SearchCenter IS NULL OR @SearchCenter.STDistance(Point) < @Radius * 1000)
  59.  
  60.             AND (@UserId IS NULL OR @VacancyLabelType IS NULL OR VacancyId IN (SELECT VacancyId FROM @labels))
  61.  
  62.             AND (@DaysAgo IS NULL OR getutcdate() <= dateadd(DAY, @DaysAgo, PublicationDate))
  63.             AND (@IncludeAgencyVacancies = 1 OR [VacancyOwnerType] = 1)
  64.  
  65.  
  66.             AND (@NannyChildMaxCount IS NULL OR @NannyChildMaxCount = 4 OR [NannyChildMaxCount] <= @NannyChildMaxCount)    
  67.             AND (@NannyInhabitancies IS NULL OR [NannyInhabitancies] & @NannyInhabitancies = @NannyInhabitancies)          
  68.  
  69.             AND EXISTS (SELECT 1 FROM vacancies.SalaryFilter(@SalaryByAgreement, @NannyMinHourlySalary, @NannyMaxHourlySalary, NannyHourlySalary))
  70.  
  71.     SELECT @RowCount = COUNT(*) FROM @vacancies
  72.  
  73.     SELECT * FROM (
  74.         SELECT
  75.             ROW_NUMBER() OVER (
  76.                 ORDER BY CASE  @SortOrder
  77.                         WHEN @OrderByDate THEN -1 * datediff(SECOND, getutcdate(), vacancies.PublicationDate)
  78.                     END
  79.                 ) AS RowNum,
  80.             Vacancies.VacancyId AS Id,
  81.             vacancies.Title,
  82.             vacancies.[Description],
  83.             vacancies.PublicationDate,
  84.             vacancies.VacancyOwnerType,
  85.             vacancies.Region,
  86.             vacancies.AreaName,
  87.             vacancies.DistrictName,
  88.             vacancies.OwnerName,
  89.             vacancies.OwnerId,
  90.             vacancies.AgeMinimum,
  91.             vacancies.AgeMaximum,
  92.             vacancies.Experience,
  93.             vacancies.WorkStart,
  94.             vacancies.NannyHourlySalary,
  95.             vacancies.JobKindAlias,
  96.             vacancies.DistrictAlias,
  97.             vacancies.AreaAlias,
  98.             vacancies.AddressShort,
  99.             vacancies.CompanyCardId
  100.         FROM vacancies.Vacancies WITH (nolock)
  101.             INNER JOIN @vacancies ids ON ids.VacancyId = Vacancies.VacancyId
  102.         ) AS DATA
  103.     WHERE
  104.         RowNum > @RowIndex AND RowNum <= @RowIndex + @PageSize
  105.     ORDER BY RowNum
  106. END
Advertisement
Add Comment
Please, Sign In to add comment