我想要一个存储过程来为 y 个页面取 x 个数据行。
例如
我有 20 个数据行
我的页面大小是 2
如果我选择第 2 页
我会得到数据行 17,18
我可以使用前 200 名并使用 order by 来选择第一个和最后一个数据行,但是我如何在两者之间获取页面。
@PageNumber INT
As
BEGIN
SELECT COUNT(rate.RateID)/200 FROM dbo.Rate where dbo.Rate.Hourly =0
DECLARE @LastIndex INT
SET @LastIndex= (SELECT TOP 1 rate.RateID FROM dbo.Rate where dbo.Rate.Hourly =0 ORDER BY rate.RateID ASC)
Select TOP 200
[RateID],
[PairID],
[Open],
[Close],
[High],
[Low],
[Difference],
[Average],
[Percentage],
[InfoDate],
[Hourly],
[CaptureDateTime]
From Rate
WHERE Hourly =0 AND RateID >=(@LastIndex+(200* @PageNumber))
ORDER BY [RateID] ASC
结尾
这是我现在所拥有的,但它无法正常工作
最佳答案
好的,由于您还没有指定您使用的是什么 RDBMS,我可以为您提供一个至少对 SQL Server 2005+ 有效的解决方案。
DECLARE @PageNumber INT, @PageSize INT
SET @PageNumber = 3
SET @PageSize = 5;
WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER(ORDER BY RateID) Corr
FROM Rate
WHERE Hourly = 0
)
SELECT *
FROM CTE
WHERE Corr BETWEEN @PageNumber*@PageSize AND @PageNumber*@PageSize+@PageSize-1
此外,您应该知道在下一版本的 SQL Server(“Denali”)中,通过对
TOP
进行一些修改,这将变得容易得多。条款。
关于sql - 通过存储过程进行数据库分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7361105/