SQL Server 將查詢結果分頁

在 SQL Server 中只要使用 order by 語法指定排序的欄位後,就可以使用 fetch next 限制取得資料的筆數,也可以使用 offset 來跳過前面幾筆資料。

例如取得 Products 資料表的第 11 ~ 20 筆資料:
    
select * from Products
order by id             -- 使用 id 欄位排序,由小到大
offset 10 rows          -- 跳過前 10 筆
fetch next 10 rows only -- 只顯示 10 筆
; 
    

稍加整理就可以很輕鬆地達成分頁功能:
    
DECLARE @PageNumber INT = 2; -- 當前頁碼
DECLARE @RowsPerPage INT = 10; -- 每頁資料筆數

select *
from Products
order by id
offset (@PageNumber - 1) * @RowsPerPage rows
fetch next @RowsPerPage rows only;
    



參考資料:
Microsoft.Learn - SELECT - ORDER BY clause (Transact-SQL)
Microsoft.Learn - FETCH (Transact-SQL)

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com