存储过程的错误

存储过程的错误

问题描述:

我无法运行此查询,其中可以是错误的,因为它是好的,感谢存储过程的错误

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

根据您的网页是如何编号(从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

尝试增加一个页面到您的网页范围的上限:

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