2009-08-06 37 views
0

在SQL Server 2005中,有一个称为row_number()的功能,使分页变得非常简单。如何在SQL Server 2000中执行服务器端分页结果?

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

是否有任何SQL Server方式在SQL Server 2000中做同样的事情?

(注:我没有获得一个唯一的序列编号为查询,即一些东西,将是ROW_NUMBER()的同义词)

回答

2
SELECT * 
FROM (
     SELECT TOP (Y - X) * 
     FROM (
       SELECT TOP Y * 
       FROM mytable 
       ORDER BY 
         column 
       ) q 
     ORDER BY 
       column DESC 
     ) 
ORDER BY 
     column 
+0

哦,是的 - 这更好:o) – 2009-08-06 17:45:41

0

不知道这是最完美的解决方案,但它为我工作时,我们使用SQL 2000 ...

如果你正在编写一个存储过程,你可以用一个临时表。

创建一个临时表,其中包含自动递增的Identity列以及与结果集相同的列。

然后,从结果集中选择数据并将其插入此临时表(按正确顺序)。

最后,从您的临时表中返回您的标识列的值作为行号的结果。

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 

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

相关问题