のBooksOnlineのドキュメントにSET XACT_ABORT ON
基づくと、T-SQLステートメントで実行時エラーが発生した場合、トランザクション全体が終了してロールバックされるという印象を受けます。
備考
SET XACT_ABORTがONのときに、Transact-SQLステートメントで実行時エラーが発生すると、トランザクション全体が終了してロールバックされます。
SQL Server 2008 R2でこれをテストする:
SET XACT_ABORT ON;
BEGIN TRANSACTION;
PRINT 'TranCount befor an error = '+CAST(@@Trancount AS varchar(50))
DROP TABLE QuertyAsdf
PRINT 'TranCount after an error = '+CAST(@@Trancount AS varchar(50))
出力を提供します:
TranCount befor an error = 1
Msg 3701, Level 11, State 5, Line 6
Cannot drop the table 'QwertyAsdf', because it does not exist or you do not have permission.
TranCount after an error = 1
SET XACT_ABORT ON
私はまた、エラーが発生した場合にバッチを終了するという印象を受けました:
SET XACT_ABORT ONは、SQL Serverに、トランザクション全体をロールバックし、実行時エラーが発生したときにバッチを中止するように指示します。
それは便利に聞こえます。どうすればそれを行うことができますか?