SET ROWCOUNT N 讓後續查詢在傳回 N 列後立即停止。利用此特性,可快速將資料指標「捲動」到目標頁起始列,再取得該頁資料。
@PageSize(頁大小)、@CurrentPage(當前頁碼,從 1 開始)。@MoveRecords = @CurrentPage * @PageSize + 1。SET ROWCOUNT @MoveRecords,按主鍵順序查詢,取得第 @MoveRecords 列的主鍵值 @ID。SET ROWCOUNT @PageSize,查詢 WHERE ID >= @ID ORDER BY ID 即得目標頁資料。SET ROWCOUNT 0 恢復預設。DECLARE @ID INT, @MoveRecords INT, @PageSize INT = 100, @CurrentPage INT = 100;
SET @MoveRecords = @CurrentPage * @PageSize + 1;
SET ROWCOUNT @MoveRecords;
SELECT @ID = ID FROM Table1 ORDER BY ID;
SET ROWCOUNT @PageSize;
SELECT * FROM Table1 WHERE ID >= @ID ORDER BY ID;
SET ROWCOUNT 0;
NOT IN (SELECT TOP ...) 子查詢的高昂成本。SET ROWCOUNT 不影響 INSERT/UPDATE/DELETE 的 TOP 子句,SQL 2005+ 建議改用 OFFSET/FETCH。