SET ROWCOUNT 快速跳過前 N 筆SET ROWCOUNT N 使後續查詢在回傳 N 列後停止。配合有索引主鍵,可實現 O(1) 級定位分頁起始點。
DECLARE @ID INT, @MoveRecords INT;
SET @MoveRecords = @CurrentPage * @PageSize - 1; -- 要跳過的筆數
-- 1. 快速掃描至目標頁首筆,記住其 ID
SET ROWCOUNT @MoveRecords;
SELECT @ID = ID FROM Table1 ORDER BY ID;
-- 2. 取回目標頁資料
SET ROWCOUNT @PageSize;
SELECT * FROM Table1 WHERE ID >= @ID ORDER BY ID;
-- 3. 重置 ROWCOUNT
SET ROWCOUNT 0;
SET ROWCOUNT 讓引擎在索引掃描中提前終止,不需讀取完整結果集ID >= @ID 直接定位,配合 TOP/ROWCOUNT 精確取回TOP M-N 子查詢或臨時表的排序/掃描開銷千萬列大表,直接翻至第 100 頁(每頁 100 筆),回應時間極短。
ID INT IDENTITY)SET ROWCOUNT 不影響 INSERT/UPDATE/DELETE 的 TOP 子句(SQL 2005+ 建議改用 TOP)OFFSET ... FETCH 語法