From 4efeda9015ed6359f1b6a2552cc62dc8b1d65c28 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 19:22:53 +0000 Subject: [PATCH] add paginated GetUsers sproc w/ search MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 Co-authored-by: Ryan Martin --- generic/paginated-user-query/GetUsers.sql | 60 +++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 generic/paginated-user-query/GetUsers.sql diff --git a/generic/paginated-user-query/GetUsers.sql b/generic/paginated-user-query/GetUsers.sql new file mode 100644 index 0000000..05dbe66 --- /dev/null +++ b/generic/paginated-user-query/GetUsers.sql @@ -0,0 +1,60 @@ +/* + Paginated User Query with Search Filter + + Usage: + DECLARE @TotalCount INT; + EXEC dbo.usp_GetUsers + @PageNumber = 1, + @PageSize = 20, + @SearchTerm = 'john', + @TotalCount = @TotalCount OUTPUT; + SELECT @TotalCount AS TotalRecords; +*/ + +-- ============================================ +-- GET USERS - Paginated with Search Filter +-- ============================================ +CREATE OR ALTER PROCEDURE dbo.usp_GetUsers + @PageNumber INT = 1, + @PageSize INT = 20, + @SearchTerm NVARCHAR(100) = NULL, + @TotalCount INT OUTPUT +AS +BEGIN + SET NOCOUNT ON; + + -- Validate inputs + IF @PageNumber < 1 SET @PageNumber = 1; + IF @PageSize < 1 SET @PageSize = 20; + IF @PageSize > 100 SET @PageSize = 100; -- Max page size + + -- Get total count for pagination metadata + SELECT @TotalCount = COUNT(*) + FROM Users + WHERE @SearchTerm IS NULL + OR FirstName LIKE '%' + @SearchTerm + '%' + OR LastName LIKE '%' + @SearchTerm + '%' + OR Email LIKE '%' + @SearchTerm + '%' + OR Username LIKE '%' + @SearchTerm + '%'; + + -- Get paged results + SELECT + UserId, + Username, + FirstName, + LastName, + Email, + IsActive, + CreatedAt, + LastLoginAt + FROM Users + WHERE @SearchTerm IS NULL + OR FirstName LIKE '%' + @SearchTerm + '%' + OR LastName LIKE '%' + @SearchTerm + '%' + OR Email LIKE '%' + @SearchTerm + '%' + OR Username LIKE '%' + @SearchTerm + '%' + ORDER BY LastName, FirstName + OFFSET (@PageNumber - 1) * @PageSize ROWS + FETCH NEXT @PageSize ROWS ONLY; +END +GO