sql >> データベース >  >> RDS >> Sqlserver

JqgridPaginationのデータをフェッチするためのストアドプロシージャの記述の難しさ

    OrderByを使用すると、コードを修正できるようです。 GetFirstで およびGetNext WITH句の一部ですが、そうではありません GetAllで 部。対応するコードは次のようになります

    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
    



    1. Postgresql10-並列構成

    2. RailsActiveRecordで複数の一致があるPostgreSQLilike

    3. MySQLのパフォーマンス–遅いクエリとinnodb_buffer_pool_size

    4. Oracleで日付から曜日名を取得する方法