MS-SQL 的分頁語法一直是很多程式人員的痛,但是微軟也不是沒有改進
在 SQL2005 的時候,推出了 ROW_NUMBER() 函數,讓程式人員寫分頁語法的時候負擔小了一點
現在 SQL 的分頁語法終於有比較快速的方法了.............
如果我要抓 第20筆到 30 筆的資料可以用下面的語法
SELECT * FROM Orders
ORDER BY OrderID
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY;
在 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() 的方式來做
;
所以還是乖乖的用 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;
( 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