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