結合列にインデックスが付けられた一時テーブルに挿入すると、 inserted
として物事が改善される可能性があります そして削除
索引付けされていません。
@@ROWCOUNT
を確認できます トリガー内でこのロジックを実行するため、行数のしきい値を超えてのみこのロジックを実行します。 ステートメント (すべての MERGE
によって影響を受ける行の総数を返します その特定のトリガーに関連するアクションだけではありません)。
その場合、次のようなことができます SELECT @NumRows =COUNT(*) FROM (SELECT TOP 10 * FROM INSERTED) T
しきい値が満たされているかどうかを確認します。
追加
実験できるもう 1 つの可能性は、これらの大規模な更新のトリガーを単純にバイパスすることです。 SET CONTEXT_INFO
を使用できます フラグを設定し、トリガー内の this の値を確認します。 OUTPUT insert.*, deleted.*
を使用できます。 JOIN
を必要とせずに行の「前」と「後」の値を取得する
DECLARE @TriggerFlag varbinary(128)
SET @TriggerFlag = CAST('Disabled' AS varbinary(128))
SET CONTEXT_INFO @TriggerFlag
UPDATE YourTable
SET Bar = 'X'
OUTPUT inserted.*, deleted.* INTO @T
/*Reset the flag*/
SET CONTEXT_INFO 0x