在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()的同义词)
在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()的同义词)
SELECT *
FROM (
SELECT TOP (Y - X) *
FROM (
SELECT TOP Y *
FROM mytable
ORDER BY
column
) q
ORDER BY
column DESC
)
ORDER BY
column
不知道这是最完美的解决方案,但它为我工作时,我们使用SQL 2000 ...
如果你正在编写一个存储过程,你可以用一个临时表。
创建一个临时表,其中包含自动递增的Identity列以及与结果集相同的列。
然后,从结果集中选择数据并将其插入此临时表(按正确顺序)。
最后,从您的临时表中返回您的标识列的值作为行号的结果。
您也可以使用光标。
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
这里唯一的问题是每行都作为单独的结果集返回,但它完成了这项工作。
哦,是的 - 这更好:o) – 2009-08-06 17:45:41