😎

正常実行できた場合にのみトランザクションをコミットするクエリーの書き方

2023/03/14に公開

備忘録として。
try-catchとtransactionを組み合わせて実現する、正常実行できた場合にのみトランザクションをコミットするクエリーの書き方です。

try-catchとtransactionを組み合わせたクエリー

サンプルクエリー
begin try
	begin transaction

	--ここに、実行するクエリーを書く

	commit transaction
end try
begin catch
    select
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_LINE() AS ErrorLine,
        ERROR_MESSAGE() AS ErrorMessage

    rollback transaction
end catch

このようにして、正常実行できた場合にのみトランザクションをコミットするクエリーを作成することができます。
また、例外をキャッチしたときの動作を確認したい場合は、👇のようにして意図的に例外を発生させてあげてください。

意図的に例外を発生させる
RAISERROR (15600, -1, -1, 'sample');

Discussion