快捷搜索:

如何实现SQL Server 2005快速web分页(1) - SQL Serve

本文着重先容SQL Server 2005新增添的ROW-NUMBER排序函数,它会根据你指定的分类标准将结果数据集进行分类,同时给数据集分配继续的页面,供大年夜家参考!

分页,便是按照某种规则显示分组数据集,然则在SQL Server 中,分页并不是十分轻易就能够实现。在以前,开拓职员平日必要自己编写法度榜样,应用临时表格来实现分页功能,或者将所有的数据结果集返回到客户端,在客户端进行分页操作。从开拓职员或者DBA的角度来看,两种措施都不能令人知足。

跟着SQL Server的宣布,此中的一些排序函数使得开拓职员编写数据分页法度榜样变得加倍简单和高效。这些新的排序函数供给了统计数据集的数目,对数据集归类,按照某种标准对数据集排序等功能。在这篇文章中,我将着重先容新增添的ROW-NUMBER排序函数,它会根据你指定的分类标准将结果数据集进行分类,同时给数据集分配继续的页面。

一个分页的实例

我老是爱好经由过程例子来先容若何应用新技巧,以是让我们来看看若何设计一个存储法度榜样,应用ROW_NUMBER这一新函数来实现数据的自动分页。

首先,必要定义一些数据布局。我们定义一个SalesHistory表格,它包孕的数据是我们在网上售出产品的贩卖记录。包括一些常见的贩卖信息,例如,所售产品、售出日期、产品售出价格等。下面的脚本便是创建这样的一个表格:

CODE:

IF OBJECT_ID('SalesHistory','U') > 0

DROP TABLE SalesHistory

CREATE TABLE SalesHistory

(

SaleID INT IDENTITY(1,1),

Product VARCHAR(30),

SaleDate SMALLDATETIME,

SalePrice MONEY

)

运行列表A中的脚本则在上面创建的SalesHistory表中添加一些例子数据。

CODE:

列表A

DECLARE @i SMALLINT

SET @i = 1

WHILE (@i

现在数据表中已经具有实例数据。接下来我们看看若何调用法度榜样来实现数据的分页显示。列表B包孕这个法度榜样的脚本内容。这个法度榜样含有两个参数:1.页面大年夜小(给定页面要显示的数据记录数目)2.目标页面(返回该页的数据记录)。

CODE:

列表B

CREATE PROCEDURE usp_SalesRecords

(

@PageSize FLOAT,

@TargetPage SMALLINT

)

AS

BEGIN

WITH Sales_CTE(PageNumber, SaleID, Product, SaleDate, SalePrice)

AS

(

SELECT

CEILING((ROW_NUMBER() OVER (ORDER BY SaleDate ASC))/@PageSize) AS PageNumber,

SaleID, Product, SaleDate, SalePrice

FROM SalesHistory FROM SalesHistory

)

SELECT

PageNumber, SaleID, Product, SaleDate, SalePrice

FROM

Sales_CTE

WHERE

PageNumber = @Targetpage

ENDCREATE PROCEDURE usp_SalesRecords

(

@PageSize FLOAT,

@TargetPage SMALLINT

)

AS

BEGIN

WITH Sales_CTE(PageNumber, SaleID, Product, SaleDate, SalePrice)

AS

(

SELECT

CEILING((ROW_NUMBER() OVER (ORDER BY SaleDate ASC))/@PageSize) AS PageNumber,

SaleID, Product, SaleDate, SalePrice

FROM SalesHistory FROM SalesHistory

)

SELECT

PageNumber, SaleID, Product, SaleDate, SalePrice

FROM

Sales_CTE

WHERE

PageNumber = @Targetpage

END

假如你刚刚开始应用SQL Server,可能会不认识以“WITH”开首的声明语句。这条语句会调用SQL Server中的一个新属性,我们称之为common table expression(CTE),从本色上来说,我们可以将CTE看作是高版本的临时表。

您可能还会对下面的文章感兴趣: