ホームページ >データベース >mysql チュートリアル >SQL Server での再帰的トリガーを防ぐにはどうすればよいですか?
SQL Server 2008 では、tblMedia テーブルのトリガー [dbo].[tblMediaAfterInsertOrUpdate] が誤って再帰的な動作を引き起こします。この動作は、トリガーがトリガーされ、その後トリガー自体がトリガーされた場合に発生します。
問題を理解するために、トリガーを調べてみましょう:
ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] ON [dbo].[tblMedia] BEFORE INSERT, UPDATE AS BEGIN ...
挿入または更新後:トリガーは、挿入または更新がコミットされる前に実行されます。
潜在的再帰: トリガー内の update ステートメントは、tblMedia テーブルの変更を試みます。この変更により、同じトリガーが再びトリガーされ、無限ループが発生する可能性があります。
再帰の防止: この再帰的な動作を防ぐには、TRIGGER_NESTLEVEL() 関数を使用してネスト レベルをチェックします。トリガーの。ネスト レベルが 1 より大きい場合、トリガーは別のトリガーによって呼び出されているため、スキップする必要があります。
ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] ON [dbo].[tblMedia] BEFORE INSERT, UPDATE AS BEGIN IF TRIGGER_NESTLEVEL() <= 1 /* Prevent recursion */ BEGIN ... END END
説明:
このチェックをトリガーに組み込むことで、無限に再帰することを防ぎ、必要なデータ変更が 1 回だけ実行されるようにします。
以上がSQL Server での再帰的トリガーを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。