SQL Server 2005: 利用新的ranking函数实现高效的数据分页操作

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

CREATE PROCEDURE northwind_OrdersPaged 
(    @PageIndex int,    @PageSize int) 
ASBEGINDECLARE @PageLowerBound intDECLARE @PageUpperBound intDECLARE @RowsToReturn int-- First set the rowcountSET @RowsToReturn = @PageSize * (@PageIndex  1)SET ROWCOUNT @RowsToReturn-- Set the page boundsSET @PageLowerBound = @PageSize * @PageIndexSET @PageUpperBound = @PageLowerBound  @PageSize  1-- Create a temp table to store the select resultsCREATE TABLE #PageIndex (    IndexId int IDENTITY (1, 1) NOT NULL,    OrderID int)-- Insert into the temp tableINSERT INTO #PageIndex (OrderID)SELECT    OrderIDFROM    OrdersORDER BY    OrderID DESC-- Return total countSELECT COUNT(OrderID) FROM Orders-- Return paged resultsSELECT    O.*FROM    Orders O,    #PageIndex PageIndexWHERE    O.OrderID = PageIndex.OrderID AND    PageIndex.IndexID > @PageLowerBound AND    PageIndex.IndexID < @PageUpperBoundORDER BY    PageIndex.IndexIDEND 
    在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

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [SQL Server] 的这些文章也感兴趣:

SQL Server应用程序中的高级SQL注入
SQL Server开发的二十一条军规
SQL Server 7.0数据库的六种数据移动方法
sqlserver 批量导入数据
专家谈SQL Server 2005的CLR
SQL Server 2005对结果集分页
Sql Server2005 Transact-SQL 学习总结之-窗口函数(OVER)
SQL Server 2008的商业智能
如何运用MSSQL sp自制未公开的加密函数
SQL Server 2005生成直方图简介