摘要:SQL - SQL SERVER 2012 Paging(分頁)
在 SQL SERVER 2012 以前,要使用 Stored Procedure 來做到分頁其實不是件難事,縱使對於此方法不熟的,也可以換用 Visual C# & VB 來做到分頁的效果。
不過現在,SQL SERVER 2012 進化了,提供了分頁的語法,筆者在做相關測試的時候,發覺上手度極高,只要看得懂MSDN的範例,其實自己要寫出一個專屬於分頁用的 Stored Procedure,其實是一件很簡單的事...
範例一:取得第10筆以後的資料
語法:
SELECT *
FROM dbo.Orders o
ORDER BY o.OrderID ASC
OFFSET 10 ROWS
結果:
範例二:從第1筆資料開始,取10筆資料
語法:
SELECT *
FROM dbo.Orders o
ORDER BY o.OrderID ASC
OFFSET 0 ROWS
FETCH NEXT 10 ROWS ONLY
結果:
範例三:使用變數,從第11筆資料開始,取20筆資料
語法:
DECLARE @p_OFFSET tinyint = 10
DECLARE @p_FETCH tinyint = 20
SELECT *
FROM dbo.Orders o
ORDER BY o.OrderID ASC
OFFSET @p_OFFSET ROWS
FETCH NEXT @p_FETCH ROWS ONLY
結果:
範例四:子查詢用法
語法:
DECLARE @MYTABLE TABLE (
C_UID INT,
C_FETCH INT
);
INSERT INTO @MYTABLE VALUES(1, 20);
SELECT *
FROM DBO.ORDERS O
ORDER BY O.ORDERID ASC
OFFSET 0 ROWS
FETCH NEXT (SELECT C_FETCH FROM @MYTABLE WHERE C_UID = 1) ROWS ONLY;
結果:
範例五:在 SQL SERVER 2012 以前的用法,取得11到20的資料
語法:
SELECT *
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY O.ORDERID) AS SEQ_NUM, *
FROM DBO.ORDERS O) AS A
WHERE SEQ_NUM > 10 AND SEQ_NUM <= 20
--WHERE SEQ_NUM BETWEEN 11 AND 20
結果:
參考:
ORDER BY 子句 (Transact-SQL)
SQL Server 2012 :分頁處理:認識 OFFSET 和 FETCH 子句
Offset and Fetch First/Next Clause – Extension to Order by clause in Sql 11(Code
Name: Denali (SQL Server 2012))