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 の相違点を次に示します。

  • TOP 句は、指定した 1 つの SELECT ステートメントに適用されます。SET ROWCOUNT は、このオプションをオフにする SET ROWCOUNT 0 など、別の SET ROWCOUNT ステートメントが実行されるまで有効です。

    重要な注意事項重要

    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 はクエリを実行するステートメントの外部で使用されるので、その値を使用してクエリのクエリ プランを生成することはできません。