首頁 > 資料庫 > mysql教程 > 如何使用 OFFSET 和 FETCH NEXT 在 SQL Server 中實作查詢分頁以及舊版的替代方案?

如何使用 OFFSET 和 FETCH NEXT 在 SQL Server 中實作查詢分頁以及舊版的替代方案?

DDD
發布: 2025-01-10 20:57:41
原創
444 人瀏覽過

How to Implement Query Paging in SQL Server Using OFFSET and FETCH NEXT, and Alternatives for Older Versions?

使用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板