【问题标题】: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
        

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

        【讨论】:

          猜你喜欢
          • 2013-01-01
          • 1970-01-01
          • 2016-12-23
          • 1970-01-01
          • 1970-01-01
          • 2011-08-22
          • 2019-12-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多