• λ我爱Aspx >> C#.Net >> SQL Server 2005: 利用新的ranking函数实现高效的数据分页操作_数据库技巧
  • SQL Server 2005: 利用新的ranking函数实现高效的数据分页操作_数据库技巧

  • :aspxer  Դ:internet  :2007-4-28 23:45:55  ؼ:sql,数据库,数据
  • 最近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 2000里面,由于系统提供了内建的ranking函数,为了给Orders表生成行号,我们不再需要利用Identity字段。

    例如,利用SQL Server 2000的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

    Ҷƪл˵?
  • һƪAccess2000数据库80万记录通用快速分页类_ASP技巧
    һƪ模仿PHP写的ASP分页 _ASP技巧