ASP

本类阅读TOP10

·asp常用数据库连接方法和技巧
·无组件生成BMP验证码
·一些常用的辅助代码 (网络收藏)
·JavaScript实现的数据表格:冻结列、调整列宽和客户端排序
·VisualStudio.NET_2003及其 MSDN 下载地址
·ASP模拟MVC模式编程
·图片以二进制流输出到网页
·MD5加密算法 ASP版
·ASP.NET编程中的十大技巧
·改进 ASP 的字符串处理性能

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
SQL Server 2005: 利用新的ranking函数实现高效的数据分页操作

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

最近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 2000ROW_NUMBER()函数,orderID字段逆序排列,给Orders表生成行号的语句如下:

 

SELECT ROW_NUMBER() OVER(ORDER BY ordered DESC) AS rownum, ordered

FROM Orders

ORDER BY rownum DESC

 

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

 

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

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




相关文章

相关软件