sql - 通过存储过程进行数据库分页

标签 sql stored-procedures

我想要一个存储过程来为 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/

相关文章:

database - 有没有存储过程的替代方案?

c# - 在 SQL Server 和 C# 中运行查询的结果不同

MySQL:试图将数据填充到另一个表的一列中

sql - 获取数据库中执行存储过程的用户名?

php - MySQL 无法插入带有外键的记录?

mysql - 就地更新 MySQL 列

mysql - 如何显示其他用户创建的过程?

database - 将多条记录合并到表中的一行中

sql - Postgres 通过两个不同的程序访问单个列

php - SQL - 多对多 - 如何在一个查询中完成?