2025年12月26日 星期五

[研究]SQL Server 抓取第 11~20 筆方法

[研究]SQL Server 抓取第 11~20 筆方法

2025-12-26

********************************************************************************

方法 1:OFFSET-FETCH (SQL Server 2012 以上) + ORDER BY

SELECT *
FROM YourTable
ORDER BY SomeColumn
OFFSET 10 ROWS         -- 跳過前 10 筆 (第 1~10 筆)
FETCH NEXT 10 ROWS ONLY;  -- 取得接下來 10 筆 (第 11~20 筆)

********************************************************************************

方法 2:ROW_NUMBER() + CTE 子查詢 (通用,任何版本)

WITH OrderedData AS
(
    SELECT *,
           ROW_NUMBER() OVER (ORDER BY SomeColumn) AS RowNum
    FROM YourTable
)
SELECT *
FROM OrderedData
WHERE RowNum BETWEEN 11 AND 20;

註:CTE(Common Table Expression,公用表達式)是 SQL Server(以及其他 SQL 系統)提供的一種臨時結果集,可以在單一查詢中像表格一樣使用。它本身不是永久表,只存在於該查詢執行期間。

分類Row 數量常見欄位數分頁建議
小型1K–10K10–50OFFSET-FETCH 或 ROW_NUMBER() 都可以
中型10K–500K10–100ROW_NUMBER() + CTE 較穩定;OFFSET-FETCH 可以用於小跳頁
大型500K+100+建議 ROW_NUMBER() + CTE,搭配索引或分區;OFFSET-FETCH 大跳頁效能差

********************************************************************************

(完)

沒有留言:

張貼留言