Advertisement
Guest User

Untitled

a guest
May 29th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 3.02 KB | None | 0 0
  1.  
  2. SET ANSI_NULLS ON
  3. GO
  4. SET QUOTED_IDENTIFIER ON
  5. GO
  6.  
  7. -- =============================================
  8. -- Author:      brandner
  9. -- Description: get all users belonging to site.
  10. -- =============================================
  11.  
  12. ALTER PROCEDURE [dbo].[usp_searchUsers]
  13.     -- Add the parameters for the stored procedure here
  14.     @siteID int,
  15.     @startRow int,
  16.     @maxRows int,
  17.     @searchParam varchar(255),
  18.     @sortBy varchar(255),
  19.     @sortDirection varchar(4)
  20.  
  21. AS
  22. BEGIN
  23.  
  24. DECLARE @endRow int
  25.  
  26. SELECT @endRow = @startRow + @maxRows - 1
  27.  
  28. SELECT @searchParam = CASE WHEN @searchParam = '' or @searchParam is null THEN '%' ELSE @searchParam END
  29.  
  30. -- SET NOCOUNT ON added to prevent extra result sets from
  31. -- interfering with SELECT statements.
  32. SET NOCOUNT ON;
  33.  
  34. WITH siteUsers AS
  35.  
  36.     (
  37.     SELECT p.personID, p.username,
  38.         n.givenName, n.familyName,
  39.         -- more user related columns here
  40.         -- use SQL Server 2k5 row_number functionality to allow sorting
  41.         ROW_NUMBER() OVER (order by p.username asc) as sortUsername,
  42.         ROW_NUMBER() OVER (order by p.username desc) as sortUsernameDESC,
  43.         ROW_NUMBER() OVER (order by n.familyName asc) as sortFamilyName,
  44.         ROW_NUMBER() OVER (order by n.familyName desc) as sortFamilyNameDESC
  45.  
  46.     FROM person_info AS p
  47.     LEFT OUTER JOIN name AS n ON n.personID = p.personID
  48.     -- more joins here for user data
  49.  
  50.     -- cross join on a table that contains one row per search keyword
  51.     CROSS JOIN dbo.listToTable(@searchParam,' ') params
  52.     WHERE p.siteID = @siteID
  53.         -- dont pull accounts marked as invalid
  54.         -- filter to find ANY keywords that match
  55.         AND (
  56.             [n].[familyName] like '%' + params.value + '%'
  57.             OR [n].[givenName] like '%' + params.value + '%'
  58.             OR [p].[userName] like '%' + params.value + '%'
  59.             -- more filters here as necessary
  60.         )
  61.  
  62.     -- group rows so that we only have one record per user and can use row_number functionality
  63.     GROUP BY p.personID, n.familyName, p.userName, n.givenname
  64.  
  65.     -- limit to records that had at lease one match for each keyword
  66.     HAVING count(*) = ( select count(*) as paramCount from dbo.listToTable(@searchParam,' ') )
  67. )
  68.  
  69. SELECT *, (select count(*) from siteUsers) as 'siteUsersCount',
  70. FROM siteUsers
  71. WHERE
  72.     case @sortDirection
  73.     when 'asc' then
  74.         case @sortBy
  75.             when 'familyName' then sortFamilyName
  76.             when 'username' then sortUsername
  77.         end
  78.     else
  79.         case @sortBy
  80.             when 'familyName' then sortFamilyNameDESC
  81.             when 'username' then sortUsernameDESC
  82.         end
  83.     end between @startRow and @endRow
  84. ORDER BY
  85.     case @sortDirection
  86.     when 'asc' then
  87.         case @sortBy
  88.             when 'familyName' then sortFamilyName
  89.             when 'username' then sortUsername
  90.         end
  91.     else
  92.         case @sortBy
  93.             when 'familyName' then sortFamilyNameDESC
  94.             when 'username' then sortUsernameDESC
  95.         end
  96.     end
  97. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement