使用 SQL 的 OFFSET 和 FETCH NEXT 實作分頁查詢 (SQL Server 2012 以上版本)
本例示範如何為查詢新增分頁功能,以檢索最新討論的論壇貼文。目標是將結果限制在指定的行範圍內(例如,「第 10 到 20 條」)。
SQL Server 2012 引入了 OFFSET 和 FETCH NEXT 關鍵字,簡化了分頁的實作:
<code class="language-sql">SELECT col1, col2, ... FROM ... WHERE ... ORDER BY -- 必须包含 ORDER BY 语句 -- 分页语句 OFFSET 10 ROWS -- 跳过 10 行 FETCH NEXT 10 ROWS ONLY; -- 获取 10 行</code>
修改原始查詢:
<code class="language-sql">SELECT PostId FROM ( SELECT PostId, MAX(Datemade) AS LastDate FROM dbForumEntry GROUP BY PostId ) AS SubQueryAlias ORDER BY LastDate DESC OFFSET 10 ROWS -- 跳过 10 行 FETCH NEXT 10 ROWS ONLY; -- 获取 10 行</code>
SQL Server 2008 及更早版本中的分頁
在 SQL Server 2012 之前的版本中,可以使用 ROW_NUMBER() 和 COUNT() 函數結合子查詢來實現分頁。例如下:
<code class="language-sql">DECLARE @Start INT DECLARE @End INT SELECT @Start = 10, @End = 20; WITH PostCTE AS ( SELECT PostId, MAX(Datemade) AS LastDate ,ROW_NUMBER() OVER (ORDER BY PostId) AS RowNumber FROM dbForumEntry GROUP BY PostId ) SELECT PostId, LastDate FROM PostCTE WHERE RowNumber BETWEEN @Start AND @End;</code>
透過調整 @Start 和 @End 變量,可以指定所需的頁面範圍。
以上是如何使用 OFFSET 和 FETCH NEXT 在 SQL Server 中實作查詢分頁以及舊版的替代方案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!