利用CTE將分頁資料取出-Stored Procedure篇

程式技術/Database 2007/12/15 17:56
views: 55990 times
之前在 用CTE來取出指定筆數 - SQL2005 這篇介紹了如何利用 CTE 來取出指定的筆數, 這篇文章將進一步實作一支 stored procedure 做為方便分頁的方式.

主要是為了方便取出指定的筆數來實作的, 所以傳入的參數很單純, 就是原本的查詢指令, 將查詢及排序條件分開, 並指定開始的索引值和結束的索引值即可, 建立的程式碼如下:



其中比較特別的是為了方便輸入起見, 只要將原來查詢指令的非排序部分和排序部分分開即可, 簡單範列如下:

原來的查詢是:
select a.orderid, a.orderdate, b.custname, b.custaddr from orders a inner join cust b on a.ordercustid = b.custid order by a.orderdate desc

利用上面的 stored procedure 做指定分頁的筆數若為 51~100 (每頁50筆的第二頁), 先將指令區分為紅色查詢及藍色排序, 並且如下輸入給 sp_getRecordByCTE:

exec sp_getRecordByCTE
'select a.orderid, a.orderdate, b.custname, b.custaddr from orders a inner join cust b on a.ordercustid = b.custid',
'order by a.orderdate desc',
51,100

便能將指定的分頁第二頁(51~100)這些資料取出, 這樣和使用 ADO 分頁比較, 不僅可以降低 network IO 外, 更能在複雜查詢時提升效能, 減少不必要的資源浪費, 對於網頁分頁使用時有很大的幫助. 不過目前尚有一個問題無法解決, 就是總筆數這個部分, 因為利用 ADO 查詢時, 可以取得總筆數這個資料, 利用這個 stored procedure sp_getRecordByCTE 將無法取得這個資訊, 看是否有沒有什麼好方法來做這個資料的取得及回傳, 若各位有什麼好建議也歡迎給我建議!

希望這個 stored procedure 對各位能有所幫助.

繼續閱讀:
存储过程分页实现代码,2005 T-SQL新增功能
http://www.cnblogs.com/microant/archive/2007/07/05/807565.html
分页实现方法的性能比较
http://blog.csdn.net/yizhu2000/archive/2007/06/03/1636573.aspx
如何实现SQL Server 2005快速web分页
http://www.no-sky.com/databases/2/2007-01-25/15762.html
top
FAV :: 收進你的MyShare個人書籤 :: 推推王 ::

用CTE來取出指定筆數 - SQL2005

程式技術/Database 2006/09/17 02:10
views: 56715 times
SQL2005中有個CTE (Common Table Expression)功能十分強大, 可以用來做遞迴式的參考, 藉以達成複雜的查詢邏輯並簡化查詢指令, 是 SQL2005的一個新的重要功能.

在使用 MySQL 時, 可以容易地利用 limit m, n 的語法進行指定筆數的取得, 然而在 SQL Server這裡一直沒有這種功能. 這樣的需求通常是應用在分頁上會用到. 不過SQL Server可以利用 ADO存取方式內的分頁方法來進行, 也就避開了這個問題. 但無論如何, 仍是將所有的資料帶到查詢端(如客戶端或是中間層)後, 再進行分頁, 效能仍然不佳.

more..



top
FAV :: 收進你的MyShare個人書籤 :: 推推王 ::








iPhone望遠鏡頭 華碩 最新無線N系列 下載天王分享器 RT-N16 9x9輕鬆看看   影音Fun享機 【百分百純手工】真心終極黃金玫瑰禮(綻放玫瑰) AXIMCom MR-105NL 3G/4G 11N 行動國民機 AXIMCom MR-101N 3G/4G 11N 超迷你智慧型分享機 Sony Ericsson 新一代音樂系列手機 Zylo W20(簡配/公司貨) EDIMAX 11n/3G無線網路寬頻 分享器(3G-6200n) FUJIFILM HS10 - 30X變焦翻轉螢幕長砲機(平輸中文) SAPIDO N速 無線寬頻分享器(RB-1202) 輕鬆自載—迅雷BT免開機下載盒 SAPIDO傻多 3G+WiMAX寬頻無敵機 (RB-1232) Intel X25-M 80G G2(MLC)2.5\ SAPIDO N速 3.5G易享機 支援BT (GR-1222) 居易科技 DrayTek Vigor2110 極速NAT多功能路由器 WR5204E Mini 無線寬頻分享器 HP v165w 16G 隨身碟 兆赫電子 ZP-520T 藍光劇院影音放影機 Apacer宇瞻2.5吋SATAII介面MLC 32GB SSD固態硬碟 Apacer宇瞻A7 Pro 64GB 2.5吋SATAII SSD固態硬碟 CASA 凱薩 RM/RMVB DVD播放機(AB-N98) 創見JetFlashTM T3 4GB極致輕薄行動碟-二入 AboCom PLS342 電力線乙太網路交換器(雙包裝) 35合1掌上型麻將機2代 美商博帝XT Boost 16GB 200X高速隨身碟 Sandisk 2GB Micro SD記憶卡-平行輸入 二代遙控器型-攝錄影機送(4G)SD卡 Nikon AF-S 18-200mm f/3.5-5.6G ED VR II代(平輸) AXIMCom PGP-108N遊戲狂人專用機


 Waiting...