亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發(fā)消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術(shù)支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當(dāng)前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

如何實現(xiàn)SQL Server 2005快速web分頁

添加時間:2013-4-19 17:33:54  添加: 思海網(wǎng)絡(luò) 
SQL Server 2005新增加的ROW-NUMBER排序函數(shù),它會根據(jù)你指定的分類標(biāo)準(zhǔn)將結(jié)果數(shù)據(jù)集進(jìn)行分類,同時給數(shù)據(jù)集分配連續(xù)的頁面,供大家參考!

  分頁,就是按照某種規(guī)則顯示分組數(shù)據(jù)集,但是在SQL Server 中,分頁并不是十分容易就能夠?qū)崿F(xiàn)。在過去,開發(fā)人員通常需要自己編寫程序,使用臨時表格來實現(xiàn)分頁功能,或者將所有的數(shù)據(jù)結(jié)果集返回到客戶端,在客戶端進(jìn)行分頁操作。從開發(fā)人員或者DBA的角度來看,兩種方法都不能令人滿意。

  隨著SQL Server的發(fā)布,其中的一些排序函數(shù)使得開發(fā)人員編寫數(shù)據(jù)分頁程序變得更加簡單和高效。這些新的排序函數(shù)提供了統(tǒng)計數(shù)據(jù)集的數(shù)目,對數(shù)據(jù)集歸類,按照某種標(biāo)準(zhǔn)對數(shù)據(jù)集排序等功能。在這篇文章中,我將著重介紹新增加的ROW-NUMBER排序函數(shù),它會根據(jù)你指定的分類標(biāo)準(zhǔn)將結(jié)果數(shù)據(jù)集進(jìn)行分類,同時給數(shù)據(jù)集分配連續(xù)的頁面。

  一個分頁的實例

  我總是喜歡通過例子來介紹如何使用新技術(shù),所以讓我們來看看如何設(shè)計一個存儲程序,使用ROW_NUMBER這一新函數(shù)來實現(xiàn)數(shù)據(jù)的自動分頁。

  首先,需要定義一些數(shù)據(jù)結(jié)構(gòu)。我們定義一個SalesHistory表格,它包含的數(shù)據(jù)是我們在網(wǎng)上售出產(chǎn)品的銷售記錄。包括一些常見的銷售信息,例如,所售產(chǎn)品、售出日期、產(chǎn)品售出價格等。下面的腳本就是創(chuàng)建這樣的一個表格:

  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中的腳本則在上面創(chuàng)建的SalesHistory表中添加一些例子數(shù)據(jù)。

  CODE:

  列表A

DECLARE @i SMALLINT
SET @i = 1
WHILE (@i <=100)
BEGIN   
INSERT INTO SalesHistory   
(Product, SaleDate, SalePrice)   
VALUES   
('Computer', DATEADD(mm, @i, '3/11/1919'), DATEPART(ms, GETDATE()) + (@i + 57) )
INSERT INTO SalesHistory   
(Product, SaleDate, SalePrice)   
VALUES   
('BigScreen', DATEADD(mm, @i, '3/11/1927'), DATEPART(ms, GETDATE()) + (@i + 13) )
INSERT INTO SalesHistory   
(Product, SaleDate, SalePrice)   
VALUES   
('PoolTable', DATEADD(mm, @i, '3/11/1908'), DATEPART(ms, GETDATE()) + (@i + 29) )
SET @i = @i + 1
END

  現(xiàn)在數(shù)據(jù)表中已經(jīng)具有實例數(shù)據(jù)。接下來我們看看如何調(diào)用程序來實現(xiàn)數(shù)據(jù)的分頁顯示。列表B包含這個程序的腳本內(nèi)容。這個程序含有兩個參數(shù):1.頁面大小(給定頁面要顯示的數(shù)據(jù)記錄數(shù)目)2.目標(biāo)頁面(返回該頁的數(shù)據(jù)記錄)。

  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”開頭的聲明語句。這條語句會調(diào)用SQL Server中的一個新屬性,我們稱之為common table expression(CTE),從本質(zhì)上來說,我們可以將CTE看作是高版本的臨時表。

 分頁的實質(zhì)就是CTE中的TSQL語句。在下面的選擇語句中,我使用了一個新的排序函數(shù)——ROW_NUMBER(這一函數(shù)很容易使用,你只需要給ROW_NUMBER函數(shù)提供一個域名作為參數(shù),ROW_NUMBER會用它來進(jìn)行分頁)。隨后,我使用@PageSize參數(shù)來劃分每頁的行數(shù)以及每頁的最大行數(shù)值。

  例如,假設(shè)現(xiàn)在有一個包含三條記錄的數(shù)據(jù)集,并設(shè)計每頁顯示兩條記錄,那么頭兩條記錄將會在第一頁顯示,因為每頁的行數(shù)必須小于或者等于第一個變量值。第三條記錄將會在第二頁顯示,因為每頁的可顯示最大行數(shù)值應(yīng)該小于2但是又大于1。

  可以使用下面的腳本調(diào)用存儲程序:

  CODE:

EXECUTE usp_SalesRecords
@PageSize = 3,
@TargetPage = 2

  執(zhí)行程序后的返回結(jié)果如下:

  

  圖1

  就如你所看到的,程序執(zhí)行后將會返回一頁的數(shù)據(jù),包含三條記錄,而且返回的是第二頁的數(shù)據(jù)集。

  需要注意的一點

  一般來說,有兩種方法完成數(shù)據(jù)結(jié)果的分頁:在數(shù)據(jù)庫層實現(xiàn)和不在數(shù)據(jù)庫層實現(xiàn)。可以在客戶端實現(xiàn)分頁,但是這樣做的時候,所有的數(shù)據(jù)都會返回到客戶端,而且在進(jìn)行數(shù)據(jù)分析的時候就決定了頁面數(shù)目。在早期版本的SQL Server中,可以在數(shù)據(jù)庫層實現(xiàn)分頁,但是需要臨時表和表變量。如果上面的例子沒有使用CTE來進(jìn)行分頁的話,分頁程序就不會那么簡單。之所以這么簡單就是因為使用了ROW_NUMBER函數(shù)的強大功能。在以后的文章中,我將會大概介紹一下其它三種排列函數(shù),并展示它們提供的一些靈活易用的函數(shù)功能。

關(guān)鍵字:SQL Server、數(shù)據(jù)庫

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網(wǎng)站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網(wǎng)安 舉報有獎  警警  手機(jī)打開網(wǎng)站