如何在SQL Server 2000中对结果进行服务器端分页?

时间:2009-08-06 17:37:55

标签: sql-server sql-server-2005 sql-server-2000

在SQL Server 2005中,有一个名为row_number()的功能,它使分页非常简单。

SELECT * FROM table WHERE row_number() between x and y

在SQL Server 2000中是否有任何SQL服务器方法可以做同样的事情?

(注意:我无法访问查询的唯一顺序编号,即可能是row_number()的同义词

3 个答案:

答案 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

这里唯一的问题是每一行都作为单独的结果集返回,但它可以完成工作。