ホームページ >データベース >mysql チュートリアル >OFFSET と FETCH NEXT を使用して SQL Server にクエリ ページングを実装する方法と、古いバージョンの代替手段
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 サイトの他の関連記事を参照してください。