• Sql Server 2005 ROW_NUMBER 函数实现分页


    过去用SQL Server 2000分页的,大多都用到了临时表。SQL Server 2005 ROW_NUMBER 函数支持分页,性能据说也非常不错。

    Paging Records Using SQL Server 2005 Database
    Paging in SQL Server 2005

    Sql Server 2005自定义分页

    最近MSDN Magazine上的一篇文章10 Tips for Writing High-Performance Web Applications提到了有效的数据分页技术对提高ASP .NET程序性能的重要性;并给出了一个实现数据分页的stored procedure的例子,抄录如下:

    CREATE PROCEDURE northwind_OrdersPaged

    (
        @PageIndex int,
        @PageSize int
    )

    AS
    BEGIN
    DECLARE @PageLowerBound int
    DECLARE @PageUpperBound int
    DECLARE @RowsToReturn int
    -- First set the rowcount
    SET @RowsToReturn = @PageSize * (@PageIndex + 1)
    SET ROWCOUNT @RowsToReturn
    -- Set the page bounds
    SET @PageLowerBound = @PageSize * @PageIndex
    SET @PageUpperBound = @PageLowerBound + @PageSize + 1
    -- Create a temp table to store the select results
    CREATE TABLE #PageIndex
    (
        IndexId int IDENTITY (1, 1) NOT NULL,
        OrderID int
    )
    -- Insert into the temp table
    INSERT INTO #PageIndex (OrderID)
    SELECT
        OrderID
    FROM
        Orders
    ORDER BY
        OrderID DESC
    -- Return total count
    SELECT COUNT(OrderID) FROM Orders
    -- Return paged results
    SELECT
        O.*
    FROM
        Orders O,
        #PageIndex PageIndex
    WHERE
        O.OrderID = PageIndex.OrderID AND
        PageIndex.IndexID > @PageLowerBound AND
        PageIndex.IndexID < @PageUpperBound
    ORDER BY
        PageIndex.IndexID
    END

        在SQL Server 2000里面,由于没有一个有效的进行ranking操作的方法,所以该例子先创建了一个有Identity字段的临时表,利用Identity字段的自增长特性,间接的为Orders表的每一行按orderID逆序赋予了一个行号, 然后基于这个行号实现分页。

    在SQL Server 2005里面,由于系统提供了内建的ranking函数,为了给Orders表生成行号,我们不再需要利用Identity字段。

    例如,利用SQL Server 2005的ROW_NUMBER()函数,按orderID字段逆序排列,给Orders表生成行号的语句如下:
     
    SELECT ROW_NUMBER() OVER(ORDER BY ordered DESC) AS rownum, ordered

    FROM Orders

    ORDER BY rownum DESC

    基于这些新的ranking函数,您可以跟方便的实现数据的分页操作。

    关于SQL Server 2005的T-SQL新特性,见文档:

    http://msdn.microsoft.com/sql/archive/default.aspx?pull=/library/en-us/dnsql90/html/sql_05tsqlenhance.asp

    欢迎大家扫描下面二维码成为我的客户,为你服务和上云

  • 相关阅读:
    Python获取会议部分的信息内容(不断完善中)
    TensorFlow学习笔记(UTF-8 问题解决 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte)
    Tensorflow学习笔记(对MNIST经典例程的)的代码注释与理解
    virtualenvwrapper
    最小二乘法与梯度下降的区别
    Git
    Jupyter
    Linux
    Iterm2
    Homebrew
  • 原文地址:https://www.cnblogs.com/shanyou/p/rownumber.html
Copyright © 2020-2023  润新知