2012-04-15 187 views
-2

我無法運行此查詢,其中可以是錯誤的,因爲它是好的,感謝存儲過程的錯誤

CREATE PROCEDURE Test 
    @PageSize int, 
    @PageNumber int 
AS 
    SELECT 
     PK_ID, Test, Descripcion 
    FROM 
     (SELECT 
      PK_ID, Test, Descripcion, 
      ROW_NUMBER() OVER (ORDER BY Test, PK_ID) AS RowNumber 
     FROM 
     Mydatabase 
    ) AS Test 
WHERE 
    RowNumber BETWEEN @PageSize * @PageNumber AND @PageSize * (@PageNumber) 
+6

如果它是確定的,爲什麼會出現錯誤? – usr 2012-04-15 23:16:38

+4

您收到的錯誤是什麼? – 2012-04-15 23:18:13

+4

我不認爲你的where子句是正確的。兩端是相同的,所以這個查詢只能返回0或1行。 – 2012-04-15 23:21:49

回答

1

根據您的網頁是如何編號(從0或從1開始),你應該改變你的WHERE子句的其中之一:

  1. 如果頁面數從0開始:

    WHERE RowNumber BETWEEN @PageSize * @PageNumber + 1 
            AND @PageSize * (@PageNumber + 1) 
    
  2. 如果頁面從1開始:

    WHERE RowNumber BETWEEN @PageSize * (@PageNumber - 1) + 1 
            AND @PageSize * @PageNumber 
    
+0

所有問題都是'+ 1' ..謝謝 – hibigo 2012-04-17 22:13:01

0

嘗試增加一個頁面到您的網頁範圍的上限:

WHERE RowNumber BETWEEN @PageSize * @PageNumber 
AND @PageSize * (@PageNumber + 1) -- added 1 here