2


0

MS SQL Server用の更新および挿入トリガーに関して、それらをアトミックにする方法はありますか? つまり、トリガー中にエラーが発生した場合、元の挿入または更新を自動的にロールバックすることは可能ですか?

2 Answer


4


後トリガーは、自動的に表に対する挿入/更新/削除アトミックDMLステートメントの一部になります。

トリガー内でROLLBACK TRANを発行して、トリガー内のすべての作業と元のI / U / Dステートメントをロールバックするだけです。 一番外側のトランもあればロールバックされます。

重要

SQL 2000以前のトリガーでロールバックすると、バッチが中止されます。 問題のあるI / U / Dの後のコードは実行されません。 Erland素晴らしい記事および another

TRY / CATCHを使用したSQL 2005の場合、実行はCATCHブロックに進み、バッチ(ストアドプロシージャなど)は正常に終了します。

http://msdn.microsoft.com/ja-jp/library/ms187844(SQL.90).aspx[ストアドプロシージャおよびトリガのロールバックおよびコミット]を参照してください。 トリガーとTRY / CATCHの相互作用は http://msdn.microsoft.com/ja-jp/library/ms175976(SQL.90).aspx[here]です。


0


MSDNには、トリガーとトランザクションに関する優れた記事があります。

基本的に、トランザクションを使用して操作をアトミックにします。