Sepertinya saya bahwa Anda dapat memperbaiki kode dengan menggunakan OrderBy
di GetFirst
dan GetNext
bagian dari Klausa WITH, tetapi tidak di GetAll
bagian. Kode yang sesuai adalah tentang berikut
ALTER PROCEDURE [dbo].[NewStoredProc]
(
@skip int,
@pageSize int,
@OrderBy Varchar(20),
@OrderByDirection Varchar(10)
)
AS
BEGIN
DECLARE @records int;
SET NOCOUNT ON;
SET @records =(select count(*) from Data where Status='A');
IF @skip <= 0
SELECT TOP (@pageSize) * from Data where Status='A'
ORDER BY CASE WHEN @OrderBy='Column1' AND @OrderByDirection='D'
THEN Column1
END DESC,
CASE WHEN @OrderBy='Column1' AND @OrderByDirection !='D'
THEN Column1
END,
CASE WHEN @OrderBy='Column2' AND @OrderByDirection='D'
THEN Column2
END DESC,
CASE WHEN @OrderBy='Column2' AND @OrderByDirection !='D'
THEN Column2
END,
CASE WHEN @OrderBy='Column3' AND @OrderByDirection='D'
THEN Column3
END DESC,
CASE WHEN @OrderBy='Column3' AND @OrderByDirection !='D'
THEN Column3
END
ELSE
WITH GetAll AS (
SELECT * from Data where Status='A'
),GetFirst AS (
SELECT TOP (@skip) *
FROM GetAll
ORDER BY CASE WHEN @OrderBy='Column1' AND @OrderByDirection='D'
THEN Column1
END DESC,
CASE WHEN @OrderBy='Column1' AND @OrderByDirection !='D'
THEN Column1
END,
CASE WHEN @OrderBy='Column2' AND @OrderByDirection='D'
THEN Column2
END DESC,
CASE WHEN @OrderBy='Column2' AND @OrderByDirection !='D'
THEN Column2
END,
CASE WHEN @OrderBy='Column3' AND @OrderByDirection='D'
THEN Column3
END DESC,
CASE WHEN @OrderBy='Column3' AND @OrderByDirection !='D'
THEN Column3
END
),GetNext AS (
SELECT TOP (@pageSize) nt.*
FROM GetAll AS nt
LEFT OUTER JOIN GetFirst AS f ON f.Col1=nt.Col1
WHERE f.Col1 IS NULL
ORDER BY CASE WHEN @OrderBy='Column1' AND @OrderByDirection='D'
THEN nt.Column1
END DESC,
CASE WHEN @OrderBy='Column1' AND @OrderByDirection !='D'
THEN nt.Column1
END,
CASE WHEN @OrderBy='Column2' AND @OrderByDirection='D'
THEN nt.Column2
END DESC,
CASE WHEN @OrderBy='Column2' AND @OrderByDirection !='D'
THEN nt.Column2
END,
CASE WHEN @OrderBy='Column3' AND @OrderByDirection='D'
THEN nt.Column3
END DESC,
CASE WHEN @OrderBy='Column3' AND @OrderByDirection !='D'
THEN nt.Column3
END
)
SELECT * FROM GetNext
RETURN @records;
END