我爱Aspx >> C#.Net >> 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
)
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
Ҷƪл˵?
如何在SqlServer与oracel中进行分..[04-28]
关于SQL Server SQL语句查询分页..[04-28]
PHP+MySQL分页显示示例分析_PHP技..[04-28]
SQL Server 2005 提供的分页查询..[04-28]
VB6 ADO ListView数据库分页显示..[04-28]
Repeater读取数据并分页 _ASP.NE..[04-28]
Sql server 2005带来的分页便利_..[04-28]
SQL分页算法,还可以更好 _数据库..[04-28]
做个DataList 可分页的数据源_AS..[04-28]
SQL server 2005的简单分页程序 ..[04-28]
模仿PHP写的ASP分页 _ASP技巧[04-28]
ASP.NET程序中用Repeater实现分页..[04-28]
DataGrid同时具有分页和排序功能..[04-28]
PHP应用分页显示制作详细讲解_PH..[04-28]
如何在SqlServer与oracel中进行分..[04-28]
用PreRender解决DataGrid分页最后..[04-28]
Asp.net url分页的用户控件 _ASP..[04-28]
关于SQL Server SQL语句查询分页..[04-28]
ASP+FSO+框架实现ASP生成htm并分..[04-28]
一种比较方便的ASP分页程序_ASP技..[04-28]