1

我正在使用以下SQL過程來獲取數據以在我的Web應用程序中用於JqGrid中的分頁。寫入難度存儲過程爲JqGrid分頁獲取數據

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 
     ),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) 

     SELECT * FROM GetNext; 
    RETURN @records; 
END 

這裏,問題是我不能在WITH子句中使用OrderBy。但是,我只需要sorting.Is有什麼辦法,我們可以做到這一點後,得到的記錄..

簡單地說..如何通過爲GetAll數據

回答

0

這似乎是我的,你可以實現順序通過使用OrderBy中的GetFirstGetNext部分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 
+0

謝謝奧列格..再次.. :) –

+0

@Avinash:不客氣! – Oleg