Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Difficoltà nella scrittura di Stored Proc per recuperare i dati per l'impaginazione di Jqgrid

Mi sembra che tu possa correggere il codice utilizzando OrderBy in GetFirst e GetNext parte della clausola WITH, ma non nel GetAll parte. Il codice corrispondente riguarderà quanto segue

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