I am trying to add sorting feature of my pagination stored procedure.
How can I do this, so far I created this one. It works fine but when pass the @sort
parameter, it didn't work.
ALTER PROCEDURE [dbo].[sp_Mk]
@page INT,
@size INT,
@sort nvarchar(50) ,
@totalrow INT OUTPUT
AS
BEGIN
DECLARE @offset INT
DECLARE @newsize INT
IF(@page=0)
begin
SET @offset = @page;
SET @newsize = @size
end
ELSE
begin
SET @offset = @page+1;
SET @newsize = @size-1
end
-- SET NOCOUNT ON added to prevent extra result sets from
SET NOCOUNT ON;
WITH OrderedSet AS
(
SELECT *,
ROW_NUMBER() OVER (ORDER BY @sort DESC) AS 'Index'
FROM [dbo].[Mk]
)
SELECT *
FROM OrderedSet
WHERE [Index] BETWEEN @offset AND (@offset + @newsize)
SET @totalrow = (SELECT COUNT(*) FROM [dbo].[Mk])
END
One way (possibly not the best) to do it is to use dynamic SQL
Here is SQLFiddle demo
the best option is to use CTE, this will have less overhead and doable option below is a sample that can be useful , here we can use the ROW_NUMBER() function to fetch only the relevant rows: