Stored procedure with Searching, Sorting and Pagination
-- GET_EMPLOYEE_LIST 'E','first_name','DESC',0,20 CREATE OR ALTER PROCEDURE [dbo].[GET_EMPLOYEE_LIST] @SEARCH_TEXT AS VARCHAR(50)='', @SORT_COLUMN_NAME AS VARCHAR(50)='', @SORT_COLUMN_DIRECTION AS VARCHAR(50)='', @START_INDEX AS INT=0, @PAGE_SIZE AS INT=10 AS BEGIN DECLARE @QUERY AS VARCHAR(MAX)='',@ORDER_QUERY AS VARCHAR(MAX)='',@CONDITIONS AS VARCHAR(MAX)='', @PAGINATION AS VARCHAR(MAX)='' SET @QUERY='SELECT * FROM Employees ' -- SEARCH OPERATION IF(ISNULL(@SEARCH_TEXT,'')<>'') BEGIN IF(ISDATE(@SEARCH_TEXT)=1) SET @CONDITIONS=' WHERE CAST(date_of_birth AS DATE)=CAST('+@SEARCH_TEXT+'AS DATE)' ELSE IF(ISNUMERIC(@SEARCH_TEXT)=1) BEGIN SET @CONDITIONS=' WHERE salary='+@SEARCH_TEXT+' OR phone_number= CAST('+@SEARCH_TEXT+'AS VARCHAR(50))' END ELSE BEGIN SET @CONDITIONS=' WHERE first_name LIKE ''%'+@SEARCH_TEXT+'%'' OR first_name +'' ''+last_name LIKE ''%'+@SEARCH_TEXT+'%'' OR last_name LIKE ''%'+@SEARCH_TEXT+'%'' OR email LIKE ''%'+@SEARCH_TEXT+'%'' OR gender LIKE ''%'+@SEARCH_TEXT+'%'' OR department LIKE ''%'+@SEARCH_TEXT+'%'' OR phone_number LIKE ''%'+@SEARCH_TEXT+'%'' ' END END -- SORT OPERATION IF(ISNULL(@SORT_COLUMN_NAME,'')<>'' AND ISNULL(@SORT_COLUMN_DIRECTION,'')<>'') BEGIN SET @ORDER_QUERY=' ORDER BY '+@SORT_COLUMN_NAME+' '+@SORT_COLUMN_DIRECTION END ELSE SET @ORDER_QUERY=' ORDER BY ID ASC' -- PAGINATION OPERATION IF(@PAGE_SIZE>0) BEGIN SET @PAGINATION=' OFFSET '+(CAST(@START_INDEX AS varchar(10)))+' ROWS FETCH NEXT '+(CAST(@PAGE_SIZE AS varchar(10)))+' ROWS ONLY' END IF(@CONDITIONS<>'') SET @QUERY+=@CONDITIONS IF(@ORDER_QUERY<>'') SET @QUERY+=@ORDER_QUERY IF(@PAGINATION<>'') SET @QUERY+=@PAGINATION PRINT(@QUERY) EXEC(@QUERY) END