Difficulty in writing Stored Proc to fetch data for Jqgrid Pagination

前端 未结 1 1998
粉色の甜心
粉色の甜心 2021-01-16 14:32

I am using the following SQL Procedure for getting data to use for pagination in JqGrid in my web Application.

ALTER PROCEDURE [dbo].[NewStoredProc] 
(
    @         


        
1条回答
  •  有刺的猬
    2021-01-16 15:32

    It seems to my that you can fix the code by usage of OrderBy in GetFirst and GetNext part of the WITH Clause, but not in the GetAll part. The corresponding code will be about the following

    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
    

    0 讨论(0)
提交回复
热议问题