2020-01-07 更新

トランザクションの実装とエラー処理(BEGIN TRANSACTION、COMMIT、ROLLBACK)

SQL ServerのTransact-SQLでトランザクション処理(BEGIN TRANSACTION、COMMIT、ROLLBACK)を実装する方法です。

今、関わっているプロジェクトでTransact-SQLを使ってデータの追加や修正といったことをしないといけなくなったので、メモとして残しておきます。

目次

  • コード
  • SQLの実行結果
  • 参考リンク

コード

トランザクションで処理と、トランザクション中にエラーが発生した場合のROLLBACKの実装はだいたい以下のような感じになります。


DECLARE @a int;

BEGIN TRY
    BEGIN TRANSACTION 
        SET @a = 'a';
    COMMIT
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
    BEGIN
        ROLLBACK
    	SELECT 'エラー ROLLBACK有り' AS result;
    END
    ELSE
    BEGIN
    	SELECT 'エラー ROLLBACK無し' AS result;
    END
END CATCH

上記のSQLは実際にテーブルに対してデータの更新は行っていません。通常は「BEGIN TRANSACTION ~ COMMIT」間にINSERTやUPDATE、DELETEなどの処理を実装します。

SQLの実行結果

上記のSQLを実行した結果は以下の通りです。

result
エラー ROLLBACK有り

「BEGIN TRANSACTION ~ COMMIT」外でエラーを発生させるとresultの内容が「エラー ROLLBACK無し」に変わるので、「@@TRANCOUNT」はINSERTやUPDATEを実行したかどうかではなくトランザクションを開始したかどうかのカウントになるようです。

参考リンク

SQL Server】関連記事