电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

如何實現SQL Server 2005快速Web分頁

瀏覽:4日期:2023-11-07 09:09:12

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

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

一個分頁的實例

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

首先,需要定義一些數據結構。我們定義一個SalesHistory表格,它包含的數據是我們在網上售出產品的銷售記錄。包括一些常見的銷售信息,例如,所售產品、售出日期、產品售出價格等。下面的腳本就是創建這樣的一個表格:

以下為引用的內容:

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表中添加一些例子數據。

以下為引用的內容:

DECLARE @i SMALLINTSET @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 + 1END

列表A

現在數據表中已經具有實例數據。接下來我們看看如何調用程序來實現數據的分頁顯示。列表B包含這個程序的腳本內容。這個程序含有兩個參數:

1.頁面大小(給定頁面要顯示的數據記錄數目)。

2.目標頁面(返回該頁的數據記錄)。

以下為引用的內容:

CREATE PROCEDURE usp_SalesRecords( @PageSize FLOAT, @TargetPage SMALLINT)ASBEGIN 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 = @TargetpageENDCREATE PROCEDURE usp_SalesRecords( @PageSize FLOAT, @TargetPage SMALLINT)ASBEGIN 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 = @TargetpageEND

列表B

如果你剛剛開始使用SQL Server,可能會不熟悉以“WITH”開頭的聲明語句。這條語句會調用SQL Server中的一個新屬性,我們稱之為common table expression(CTE),從本質上來說,我們可以將CTE看作是高版本的臨時表。

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

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

可以使用下面的腳本調用存儲程序:

以下為引用的內容:

EXECUTE usp_SalesRecords

@PageSize = 3,

@TargetPage = 2執行程序后的返回結果如下:

PageNumberSaleIDProductSaleDateSalePrice212PoolTable7/11/19080:00640215PoolTable8/11/19080:00641218PoolTable9/11/19080:00658

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

需要注意的一點

一般來說,有兩種方法完成數據結果的分頁:在數據庫層實現和不在數據庫層實現。可以在客戶端實現分頁,但是這樣做的時候,所有的數據都會返回到客戶端,而且在進行數據分析的時候就決定了頁面數目。在早期版本的SQL Server中,可以在數據庫層實現分頁,但是需要臨時表和表變量。如果上面的例子沒有使用CTE來進行分頁的話,分頁程序就不會那么簡單。之所以這么簡單就是因為使用了ROW_NUMBER函數的強大功能。

標簽: Sql Server 數據庫
主站蜘蛛池模板: 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 常州翔天实验仪器厂-恒温振荡器-台式恒温振荡器-微量血液离心机 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 脱硫搅拌器厂家-淄博友胜不锈钢搅拌器厂家 | 北京三友信电子科技有限公司-ETC高速自动栏杆机|ETC机柜|激光车辆轮廓测量仪|嵌入式车道控制器 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 搬运设备、起重设备、吊装设备—『龙海起重成套设备』 | ptc_浴霸_大巴_干衣机_呼吸机_毛巾架_电动车加热器-上海帕克 | 培训中心-翰香原香酥板栗饼加盟店总部-正宗板栗酥饼技术 | 高压油管,液压接头,液压附件-烟台市正诚液压附件 | 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | 电位器_轻触开关_USB连接器_广东精密龙电子科技有限公司 | 浙江工业冷却塔-菱电冷却塔厂家 - 浙江菱电冷却设备有限公司 | 拖鞋定制厂家-品牌拖鞋代加工厂-振扬实业中国高端拖鞋大型制造商 | 外贸网站建设-外贸网站设计制作开发公司-外贸独立站建设【企术】 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 密封圈_泛塞封_格莱圈-[东莞市国昊密封圈科技有限公司]专注密封圈定制生产厂家 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 瓶盖扭矩仪(扭力值检测)-百科 | 飞歌臭氧发生器厂家_水处理臭氧发生器_十大臭氧消毒机品牌 | 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 | 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 高温热泵烘干机,高温烘干热泵,热水设备机组_正旭热泵 | 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 炉门刀边腹板,焦化设备配件,焦化焦炉设备_沧州瑞创机械制造有限公司 | 实体店商新零售|微赢|波后|波后合作|微赢集团 | 安徽集装箱厂-合肥国彩钢结构板房工程有限公司 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 点胶机_点胶阀_自动点胶机_智能点胶机_喷胶机_点胶机厂家【欧力克斯】 | 南京欧陆电气股份有限公司-风力发电机官网| 沉降天平_沉降粒度仪_液体比重仪-上海方瑞仪器有限公司 |