[研究]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–10K | 10–50 | OFFSET-FETCH 或 ROW_NUMBER() 都可以 |
| 中型 | 10K–500K | 10–100 | ROW_NUMBER() + CTE 較穩定;OFFSET-FETCH 可以用於小跳頁 |
| 大型 | 500K+ | 100+ | 建議 ROW_NUMBER() + CTE,搭配索引或分區;OFFSET-FETCH 大跳頁效能差 |
********************************************************************************
(完)
沒有留言:
張貼留言