データベースへの更新処理で Rollback/Commit の確認処理を自動化

SI事業では保守作業などでSQLを流してDB操作をすることがちょくちょくあります。(自社開発系は経験がないのでどうしてるか分かりません...)

今まで、ロールバックするように記述したスクリプトを発行し、正しく登録されることを確認してからコミットに書き直して登録という作業をしていました。

ですが、SQL Server には TRY-CATCH という構文が 2005 の時代からあるということを知ったのでメモしておこうと思います。

以下のように記載しておけば、コミットに書き直すなんて作業しなくなります。

begin try

    begin transaction

    -- 何かしらの更新処理

    commit transaction

end try
begin catch

    -- 以下の select 文でキャッチしたエラーの詳細を確認する
    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

    -- sqlcmd などのツールにエラーを伝播させるための throw
    -- SQL Server Management Studio で発行する場合は不要
    throw

end catch