ホームページ >データベース >mysql チュートリアル >OFFSET と FETCH NEXT を使用して SQL Server にクエリ ページングを実装する方法と、古いバージョンの代替手段

OFFSET と FETCH NEXT を使用して SQL Server にクエリ ページングを実装する方法と、古いバージョンの代替手段

DDD
DDDオリジナル
2025-01-10 20:57:41445ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。