2012-04-16 9 views
10

"INSTEAD OF"トリガーを持つテーブルのInsertステートメントは、実行の代わりに無限ループを引き起こしますか?例えばTRIGGERの代わりに、無限にループするのでしょうか?

この:

CREATE TRIGGER setDescToUpper ON part_numbers 
INSTEAD OF INSERT 

AS 
BEGIN 
    INSERT INTO part_numbers (
     colA, 
     colB, 
     part_description 
    ) SELECT 
     colA, 
     colB, 
     UPPER(part_description) 
    ) FROM 
     INSERTED 
END 
GO 

トリガー「の代わりに」内部のINSERT文は、ループを引き起こすだろうか?

再帰トリガを無効にしたくないです。

トリガーを一時的に無効にする必要はありますか?

出典:SQL Server - after insert trigger - update another column in the same table

答えて

14

このINSERTトリガーを再起動しません。

SQL Serverは、起動時の理由により、INSTEAD OFトリガーを再帰的に呼び出すことはありません。

+3

+1右、それはINSTEAD OFトリガーです。 [MSDN](http://msdn.microsoft.com/en-us/library/ms189799.aspx): "テーブルに定義されたINSTEAD OFトリガが、通常はINSTEAD OFトリガを発生させるテーブルに対してステートメントを実行する場合トリガーは再帰的に呼び出されるのではなく、代わりに、テーブルにINSTEAD OFトリガーがなく、制約操作の連鎖とAFTERトリガーの実行を開始するように処理されます。 – Andomar

+0

このシナリオでINSERT文を使用したときに何が起こるか説明できますか?引き金内のINSERTはまだ実行されますか? –

+0

ありがとうございます。注目される。 – zunetastic

関連する問題