0

テーブルにレコードを挿入し、同時に 20 分より古いすべてのレコードを削除するストア プロシージャがあります。

私はそれを最適化しようとしましたが、削除操作のコストが非常に高いことがわかりました。そこで、削除操作を行う after insert トリガーを作成することにしました。

動作が速くなったように見えますが、実行計画にはトリガーからの「delete」ステートメントが表示されています。唯一の違いは、delete ステートメントの「クエリ コスト (バッチに対する相対値): 0%」であることです。

私の質問は、プロシージャがレコードを挿入するとき、すぐに結果を返すのか、それとも after insert トリガーが完了するのを待つのかということです。

4

1 に答える 1

2

トリガーは、呼び出し元のプロシージャと同じトランザクションの一部であるため、MSDN から、トリガーが起動した場合にのみトランザクション全体が完了します。

トリガーとそれを起動するステートメントは、トリガー内からロールバックできる単一のトランザクションとして扱われます。重大なエラー (ディスク容量不足など) が検出された場合、トランザクション全体が自動的にロールバックされます。

MSDN - DML トリガーについて

于 2013-02-06T12:37:08.100 に答える