ホームページ >データベース >mysql チュートリアル >SQL Server でページングを実装して特定の行範囲を取得するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。