分页,就是按照某种规则显示分组数据集,但是在SQL Server 中,分页并不是十分容易就能够实现,
如何实现SQL Server 2005快速web分页(1)数据库
。在过去, 开发 人员通常需要自己编写程序,使用临时表格来实现分页功能,或者将所有的数据结果集返回到客户端,在客户端进行分页操作。从开发人员或者DBA的角度分页,就是按照某种规则显示分组数据集,但是在SQL Server 中,分页并不是十分容易就能够实现。在过去,开发人员通常需要自己编写程序,使用临时表格来实现分页功能,或者将所有的数据结果集返回到客户端,在客户端进行分页操作。从开发人员或者DBA的角度来看,两种方法都不能令人满意。
随着SQL Server的发布,其中的一些排序函数使得开发人员编写数据分页程序变得更加简单和高效。这些新的排序函数提供了统计数据集的数目,对数据集归类,按照某种标准对数据集排序等功能。在这篇文章中,我将着重介绍新增加的ROW-NUMBER排序函数,它会根据你指定的分类标准将结果数据集进行分类,同时给数据集分配连续的页面。
一个分页的实例
我总是喜欢通过例子来介绍如何使用新技术,所以让我们来看看如何设计一个存储程序,使用ROW_NUMBER这一新函数来实现数据的自动分页。
首先,需要定义一些数据结构。我们定义一个SalesHistory表格,它包含的数据是我们在网上售出产品的销售记录。包括一些常见的销售信息,例如,所售产品、售出日期、产品售出价格等。下面的脚本就是创建这样的一个表格:
CODE:
<PRE></p><p> IF OBJECT_ID('SalesHistory','U') > 0</p><p> DROP TABLE SalesHistory</p><p> CREATE TABLE SalesHistory</p><p> (</p><p> SaleID INT IDENTITY(1,1),</p><p> Product VARCHAR(30),</p><p> SaleDate SMALLDATETIME,</p><p> SalePrice MONEY</p><p> )</p></PRE>
运行列表A中的脚本则在上面创建的SalesHistory表中添加一些例子数据。
CODE:
列表A
<PRE></p><p> DECLARE @i SMALLINT</p><p> SET @i = 1</p><p> WHILE (@i <=100)</p><p> BEGIN</p><p> INSERT INTO SalesHistory</p><p> (Product, SaleDate, SalePrice)</p><p> VALUES</p><p> ('Computer', DATEADD(mm, @i, '3/11/1919'), DATEPART(ms, GETDATE()) + (@i + 57) )</p><p> INSERT INTO SalesHistory</p><p> (Product, SaleDate, SalePrice)</p><p> VALUES</p><p> ('BigScreen', DATEADD(mm, @i, '3/11/1927'), DATEPART(ms, GETDATE()) + (@i + 13) )</p><p> INSERT INTO SalesHistory</p><p> (Product, SaleDate, SalePrice)</p><p> VALUES</p><p> ('PoolTable', DATEADD(mm, @i, '3/11/1908'), DATEPART(ms, GETDATE()) + (@i + 29) )</p><p> SET @i = @i + 1</p><p> END</p></PRE>
现在数据表中已经具有实例数据,
电脑资料
《如何实现SQL Server 2005快速web分页(1)数据库》(https://www.unjs.com)。接下来我们看看如何调用程序来实现数据的分页显示。列表B包含这个程序的脚本内容。这个程序含有两个参数:1.页面大小(给定页面要显示的数据记录数目)2.目标页面(返回该页的数据记录)。CODE:
列表B
<PRE></p><p> CREATE PROCEDURE usp_SalesRecords</p><p> (</p><p> @PageSize FLOAT,</p><p> @TargetPage SMALLINT</p><p> )</p><p> AS</p><p> BEGIN</p><p> WITH Sales_CTE(PageNumber, SaleID, Product, SaleDate, SalePrice)</p><p> AS</p><p> (</p><p> SELECT</p><p> CEILING((ROW_NUMBER() OVER (ORDER BY SaleDate ASC))/@PageSize) AS PageNumber,</p><p> SaleID, Product, SaleDate, SalePrice</p><p> FROM SalesHistory FROM SalesHistory</p><p> )</p><p> SELECT</p><p> PageNumber, SaleID, Product, SaleDate, SalePrice</p><p> FROM</p><p> Sales_CTE</p><p> WHERE</p><p> PageNumber = @Targetpage</p><p> ENDCREATE PROCEDURE usp_SalesRecords</p><p> (</p><p> @PageSize FLOAT,</p><p> @TargetPage SMALLINT</p><p> )</p><p> AS</p><p> BEGIN</p><p> WITH Sales_CTE(PageNumber, SaleID, Product, SaleDate, SalePrice)</p><p> AS</p><p> (</p><p> SELECT</p><p> CEILING((ROW_NUMBER() OVER (ORDER BY SaleDate ASC))/@PageSize) AS PageNumber,</p><p> SaleID, Product, SaleDate, SalePrice</p><p> FROM SalesHistory FROM SalesHistory</p><p> )</p><p> SELECT</p><p> PageNumber, SaleID, Product, SaleDate, SalePrice</p><p> FROM</p><p> Sales_CTE</p><p> WHERE</p><p> PageNumber = @Targetpage</p><p> END</p></PRE>
共2页: 1 [2] 下一页
原文转自:http://www.ltesting.net