ホームページ >データベース >mysql チュートリアル >SQL Server でページングを実装して特定の行範囲を取得するにはどうすればよいですか?

SQL Server でページングを実装して特定の行範囲を取得するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-10 20:51:45833ブラウズ

How to Implement Paging in SQL Server to Retrieve Specific Row Ranges?

SQL Server ページング テクノロジの詳細な説明

ページング (または特定の数の行をスキップして、指定された数の行を取得する) は、データベース システムの一般的な機能です。カスタム ページング機能により、データ取得プロセスを柔軟に制御できます。この記事では、SQL Server 2012 以前を含む、さまざまなバージョンの SQL Server でページングを実装する方法を説明します。

お問い合わせ要件

データベース テーブルから投稿 ID を取得するクエリがあるとします。現在のクエリは、最新の日付に基づいて上位 10 件の投稿 ID を取得します。目標は、特定の行数をスキップしてフェッチできるようにページネーションを実装し、単に「上位 10 件」ではなく「最近アクティブな投稿の 10 番目から 20 番目まで」を取得できるようにすることです。

SQL Server 2012 の実装

SQL Server 2012 では、OFFSET および FETCH NEXT キーワードを使用してページネーションを簡単に行うことができます:

<code class="language-sql">SELECT PostId 
FROM
(
    SELECT PostId, MAX(Datemade) AS LastDate
    FROM dbForumEntry 
    GROUP BY PostId
) SubQueryAlias
ORDER BY LastDate DESC
OFFSET 10 ROWS       -- 跳过 10 行
FETCH NEXT 10 ROWS ONLY;   -- 获取接下来的 10 行</code>

このクエリは、最初の 10 行をスキップして次の 10 行を取得し、最近「10 番目から 20 番目」までのアクティブな投稿の投稿 ID を効果的に取得します。

SQL Server 2008 の実装

SQL Server 2008 以前のバージョンでは、ページングの実装はより複雑です。 ROW_NUMBER() 関数と CTE (共通テーブル式) を組み合わせて使用​​すると、目的の結果を得ることができます:

<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 > @Start AND RowNumber <= @End;</code>

この例では、ページネーション パラメーターを定義するために 2 つの変数 @Start@End が宣言されています。クエリはまず、ROW_NUMBER() 関数を使用して各投稿の行番号を計算します。次に、CTE を使用して、指定されたページネーション パラメーターに基づいて結果をフィルターし、必要な投稿 ID とその最新の日付を取得します。

適切な手法を使用すると、カスタム ページングを SQL に実装して、データ取得の柔軟性を高め、データベース クエリを最適化できます。

以上がSQL Server でページングを実装して特定の行範囲を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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