2019年2月18日 星期一

MS-SQL 分頁 (SQL Paging)

MS-SQL 的分頁語法一直是很多程式人員的痛,但是微軟也不是沒有改進

在 SQL2005 的時候,推出了  ROW_NUMBER() 函數,讓程式人員寫分頁語法的時候負擔小了一點

現在 SQL 的分頁語法終於有比較快速的方法了.............
如果我要抓 第20筆到 30 筆的資料可以用下面的語法

SELECT * FROM Orders
ORDER BY OrderID
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY;
還沒說完,請繼續往下看~~


很可惜的是上面的語法僅支援 SQL2011、SQL Server CE4.0,真是殘念>"<

所以還是乖乖的用 CTE 加上 ROW_NUMBER() 的方式來做

;
WITH CTEResults AS 
(
     SELECT
         IDColumn
,
         SomeField
,
         DateField ROW_NUMBER
() OVER (ORDER BY DateField) AS RowNum
    
FROM MyTable ) 
SELECT
 *,
(SELECT MAX(RowNum) FROM CTEResults)  
as TotalRows  ---### 這裡會回傳總筆數 FROM CTEResults WHERE RowNum BETWEEN 20 AND 30;

from : https://blog.xuite.net/dlnk/work/51786477-MS-SQL+%E5%88%86%E9%A0%81+%28SQL+Paging%29

沒有留言:

張貼留言