存储过程的错误
问题描述:
我无法运行此查询,其中可以是错误的,因为它是好的,感谢存储过程的错误
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)
答
根据您的网页是如何编号(从0或从1开始),你应该改变你的WHERE
子句的其中之一:
-
如果页面数从0开始:
WHERE RowNumber BETWEEN @PageSize * @PageNumber + 1 AND @PageSize * (@PageNumber + 1)
-
如果页面从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
如果它是确定的,为什么会出现错误? – usr 2012-04-15 23:16:38
您收到的错误是什么? – 2012-04-15 23:18:13
我不认为你的where子句是正确的。两端是相同的,所以这个查询只能返回0或1行。 – 2012-04-15 23:21:49