在SQL Server 2005中,有一个名为row_number()的功能,它使分页非常简单。
SELECT * FROM table WHERE row_number() between x and y
在SQL Server 2000中是否有任何SQL服务器方法可以做同样的事情?
(注意:我无法访问查询的唯一顺序编号,即可能是row_number()的同义词
答案 0 :(得分:2)
SELECT *
FROM (
SELECT TOP (Y - X ) *
FROM (
SELECT TOP Y *
FROM mytable
ORDER BY
column
) q
ORDER BY
column DESC
)
ORDER BY
column
答案 1 :(得分:0)
不确定这是否是最优雅的解决方案,但在我们使用SQL 2000时它对我有用...
如果您正在编写存储过程,则可以使用临时表来执行此操作。
创建一个临时表,该表具有自动递增的标识列以及与结果集相同的列。
然后,从结果集中选择数据并将其插入此临时表(按正确的顺序)。
最后,返回临时表的结果,其中Identity列的值作为行号。
答案 2 :(得分:0)
您也可以使用光标。
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
这里唯一的问题是每一行都作为单独的结果集返回,但它可以完成工作。