次の方法で共有


TOP と PERCENT の使用による結果セットの制限

TOP 句を使用すると、結果セットに返される行数を制限できます。

TOP ( expression ) [ PERCENT ] [ WITH TIES ]

ここで、expression は返される行数を指定する数値式です。PERCENT が指定された場合は、結果セット行のうち、expression が指定するパーセンテージの行が返されます。次に例を示します。

TOP (120) /*Return the top 120 rows of the result set. */
TOP (15) PERCENT /* Return the top 15 percent of the result set. */.
TOP(@n) /* Return the top @n rows of the result set, with the variable declaration: DECLARE @n AS BIGINT; SET @n = 2 */.

SELECT ステートメントに TOP 句と ORDER BY 句がある場合、返される行は順序付けられた結果セットから選択されます。結果セット全体は指定された順序で構築され、順序付けられた結果セットの先頭から n 行が返されます。WITH TIES も指定された場合は、expression によって指定された数を超えるかどうかにかかわらず、ORDER BY 句によって返された最後の値を含むすべての行が返されます。

TOP と SET ROWCOUNT

結果セットのサイズを制限するもう 1 つの方法は、ステートメントを実行する前に SET ROWCOUNT n ステートメントを実行することです。SET ROWCOUNT と TOP の相違点を次に示します。

  • SET ROWCOUNT の制限は、ORDER BY の評価後に結果セットの行を構築するときに適用されます。ORDER BY を指定すると、SELECT ステートメントは、指定された ORDER BY の分類に従って並べ替えられた値のセットから n 行が選択されたときに終了します。
  • TOP 句は、指定した 1 つの SELECT ステートメントに適用されます。SET ROWCOUNT は、このオプションをオフにする SET ROWCOUNT 0 など、別の SET ROWCOUNT ステートメントが実行されるまで有効です。
    ms187043.note(ja-jp,SQL.90).gif重要 :
    SQL Server の次のリリースでは、SET ROWCOUNT を使用しても、DELETE、INSERT、および UPDATE ステートメントが影響を受けることはありません。新しい開発作業では DELETE、INSERT、および UPDATE ステートメントでの SET ROWCOUNT の使用を避け、現在 SET ROWCOUNT を使用しているアプリケーションは変更を検討してください。現在 SET ROWCOUNT を使用している DELETE、INSERT、および UPDATE ステートメントは、TOP を使用して記述し直すことをお勧めします。
    SELECT ステートメントへの SET ROWCOUNT の影響は変化しませんが、次のような理由で SET ROWCOUNT を使用するよりも SELECT と TOP の組み合わせを使用することをお勧めします。 - SET ROWCOUNT を使用すると、ほとんどの SELECT、INSERT、UPDATE、および DELETE ステートメントは、指定された行数を処理したところで処理が停止されます。この動作は、トリガの起動に関する内部動作にも適用されます。 - クエリ オプティマイザでは、クエリの実行プランを生成するときに、TOP 句の *expression* の値を SELECT ステートメントの一部として使用できます。SET ROWCOUNT はクエリを実行するステートメントの外部で使用されるので、その値を使用してクエリのクエリ プランを生成することはできません。

参照

その他の技術情報

TOP (Transact-SQL)
SELECT (Transact-SQL)
SET ROWCOUNT (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手