パーティション ビューで、UPDATE および DELETE ステートメントと一緒に TOP を使用することはできません。
INSERT、UPDATE、MERGE、または DELETE と共に使用される TOP 式で参照される行は、任意の順序に並べられません。TOP n はランダムな n 行を返します。たとえば、次の INSERT ステートメントには ORDER BY 句が含まれていますが、この句は INSERT ステートメントが直接参照する行には影響しません。
INSERT TOP (2) INTO Table2 (ColumnB)
SELECT ColumnA FROM Table1
ORDER BY ColumnA;
このクエリの ORDER BY 句では、入れ子にされている SELECT ステートメントで返される行のみが参照されます。INSERT ステートメントでは、SELECT ステートメントで返された任意の 2 行が選択されます。SELECT サブクエリからの最初の 2 行が挿入されるようにするには、次のようにクエリを書き直します。
INSERT INTO Table2 (ColumnB)
SELECT TOP (2) ColumnA FROM Table1
ORDER BY ColumnA;
SQL Server では、TOP 句で作成されたビューを更新できます。TOP 句はビュー定義に含まれているので、結果が TOP 式の要件を満たさなくなると、更新したときに特定の行がビューから削除される場合があります。詳細については、「ビューを使用したデータ変更」を参照してください。
クエリ内の TOP 式は、トリガが起動されたときに実行されるステートメントには影響しません。トリガ内で挿入および更新されたテーブルでは、INSERT、UPDATE、MERGE、または DELETE ステートメントによって実際に影響を受けた行のみが表示されます。
MERGE ステートメントでの TOP の使用
MERGE ステートメントで指定した TOP 句は、ソース テーブル全体と対象テーブル全体が結合され、挿入、更新、または削除操作の対象とならない結合された行が削除された後に適用されます。TOP 句を使用すると、結合された行の数が指定の値まで減少し、挿入、更新、または削除操作が残りの結合された行に順序付けなしで適用されます。つまり、WHEN 句で定義された各操作に行を割り当てる順序に決まりはありません。たとえば、TOP (10) と指定すると 10 行に影響し、そのうち 7 行が更新されて 3 行が挿入されたり、1 行が削除され、5 行が更新され、4 行が挿入されたりします。
MERGE ステートメントはソース テーブルと対象テーブルの両方のフル テーブル スキャンを実行するので、TOP 句を使用し、複数のバッチを作成して大きなテーブルを変更すると、I/O パフォーマンスが影響を受ける場合があります。この場合は、一連のすべてのバッチが新しい行を対象としていることを確認してください。詳細については、「MERGE ステートメントのパフォーマンスの最適化」を参照してください。