MS doc 語法說明
ORDER BY order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
[ ,...n ]
[ <offset_fetch> ]
<offset_fetch> ::=
{
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
[
FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
]
}
建立 uspPagingByOffset Store Procedure 來使用分頁功能- offset:跳過 N 筆資料
- fetch next:跳過 N 筆資料後,抓指定筆數資料
CREATE PROCEDURE [dbo].[uspPagingByOffset]
(
@PageIndex int ,
@PageRow int
)
AS
BEGIN
SELECT SalesOrderID
FROM [Sales].[SalesOrderHeader]
ORDER BY SalesOrderID
OFFSET ((@PageIndex - 1) * @PageRow) ROWS
FETCH NEXT @PageRow ROWS ONLY
END
GO
執行 Store Procedure 要取出 第 2 頁,每頁 10 筆資料的分頁資料EXEC uspPagingByOffset 2 , 10
左結果為分頁結果、右結果為直接 Select 全部資料,搭配 SSMS 的資料編號來閱讀網路上範例看到 First 或 Next 交錯使用,測試結果是一樣,在 MS doc 上有發現這段說明
FIRST 和 NEXT 是同義字,基於 ANSI 相容性提供它們
ROW 和 ROWS 是同義字,基於 ANSI 相容性提供它們