By: Ashish Kumar Mehta|Updated: 2011-04-18| コメント (4) | 関連記事 1 | 2 | 3 | 4 | 5 | その他 > Paging

Problem

SQL Server 2012 の新機能を見ているとき、新しい機能 OFFSET および FETCH に出会いました。 SQL Server 2012 の OFFSET および FETCH 句は、完全な結果セットから結果のページまたはウィンドウのみをフェッチするオプションを提供します。 このヒントでは、SQL Server 2012のOFFSETとFETCHの機能を使用する例を見ていきます。 また、この新しい機能を使用して、SQL Server のページングまたは SQL データ ページの取得を実装する方法を紹介します。

Solution

SQL Server 2012 のこの機能を使用すると、クライアントに結果を表示するときに SQL Server のページングを簡単に実装することができます。 簡単な例と、SQL ページングを実装するためのストアド プロシージャの作成方法について説明します。

SQL Server 2012 の OFFSET および FETCH 機能を使用する方法を示す簡単な例を見てみましょう。 以下の TSQL は、ORDER BY 句の後に OFFSET と FETCH コマンドがある以外は、今日作成したものと同じに見えますが、ORDER BY 句の後に OFFSET と FETCH コマンドがあります。 注意点としては、この機能を使うにはORDER BYを使用する必要があります。 FETCHは次の5行を取得します。

USE AdventureWorks2008R2GOSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID ASC OFFSET 100 ROWS FETCH NEXT 5 ROWS ONLYGO

以下のスニペットは、上記のコマンドを実行したときの出力を示しています。 これは、最初の 100 行が破棄され、クエリが完全なレコードセット内の次の 5 行をフェッチしたことを示しています。

別の例を見てみましょう。 このストアドプロシージャでは、ページ番号と返すべき行数を渡しています。

USE AdventureWorks2008R2GOIF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'.') AND type in (N'P', N'PC'))DROP PROCEDURE .GOCREATE PROCEDURE ExampleUsageOfSQLServerDenaliPagingFeature ( @PageNo INT, @RowCountPerPage INT )ASSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID OFFSET (@PageNo - 1) * @RowCountPerPage ROWS FETCH NEXT @RowCountPerPage ROWS ONLYGO

では、以下のコマンドを使用してストアド プロシージャを実行してみましょう。 これは、レコードが BusinessEntityID によって並べられる 21 ページから始まる 5 つのレコードを提供します。

/* Display Records Between 101 AND 105 BusinessEntityID */EXECUTE ExampleUsageOfSQLServerDenaliPagingFeature 21, 05GO

以下のスニペットは、上記のストアド プロシージャが正常に実行された場合の出力です。 最初の 100 行 (20 ページ * 1 ページあたり 5 行 = 100) が破棄され、ストアド プロシージャは次の 5 行のみをフェッチし、それによってクライアントに送信される行の数を制限していることがわかります。

このヒントでは、SQL Server 2012 の OFFSET および FETCH 機能を使用して、SQL Server ページングを簡単に実現できることを確認しました。 この新機能を使えば、SQLのページングは以前ほど難しくありません。

Next Steps
  • Get an Overview of WITH RESULT SETS Feature of SQL Server 2012

Last Updated: 2011-04-18

著者について
Ashish Kumar Mehta は MSSQLTips.Inc に寄稿しています。2009 年以来、60 以上のヒントを提供しています。
私のヒントをすべて表示

コメントを残す

メールアドレスが公開されることはありません。