【问题标题】:How can I do server side pagination of results in SQL Server 2000?如何在 SQL Server 2000 中对结果进行服务器端分页?
【发布时间】:2009-08-06 17:37:54
【问题描述】:
在 SQL Server 2005 中,有一个名为 row_number() 的功能,它使分页变得非常简单。
SELECT * FROM table WHERE row_number() between x and y
在 SQL Server 2000 中是否有任何 SQL 服务器方法可以做同样的事情?
(注意:我无法访问查询的唯一顺序编号,即与 row_number() 同义的东西)
【问题讨论】:
标签:
sql-server
sql-server-2005
sql-server-2000
【解决方案1】:
SELECT *
FROM (
SELECT TOP (Y - X ) *
FROM (
SELECT TOP Y *
FROM mytable
ORDER BY
column
) q
ORDER BY
column DESC
)
ORDER BY
column
【解决方案2】:
不确定这是否是最优雅的解决方案,但当我们使用 SQL 2000 时它对我有用...
如果您正在编写存储过程,则可以使用临时表。
创建一个临时表,该表具有自动递增的标识列以及与结果集相同的列。
然后,从结果集中选择数据并将其插入到这个临时表中(以正确的顺序)。
最后,从您的身份列的值作为行号的临时表返回结果。
【解决方案3】:
您也可以使用光标。
DECLARE @i INT
DECLARE C CURSOR FOR
SELECT ... FROM ... ORDER BY ...
OPEN C
FETCH ABSOLUTE @StartRow FROM C
SET @i = 1
WHILE (@@FETCH_STATUS == 0) AND (@i < @EndRow - @StartRow) BEGIN
-- Do whatever you need
FETCH NEXT FROM C
END
CLOSE C
DEALLOCATE C
这里唯一的问题是每一行都作为一个单独的结果集返回,但它完成了这项工作。