1. ホーム
  2. sql

[解決済み】SQL Serverでのトランザクションの正しい使い方

2022-04-05 16:15:28

質問

2つのコマンドがあり、両方が正しく実行されるか、または両方が実行されない必要があります。そこで、トランザクションが必要だと思うのですが、その正しい使い方がわかりません。

以下のスクリプトの問題点は何ですか?

BEGIN TRANSACTION [Tran1]

INSERT INTO [Test].[dbo].[T1]
    ([Title], [AVG])
VALUES ('Tidd130', 130), ('Tidd230', 230)

UPDATE [Test].[dbo].[T1]
  SET [Title] = N'az2' ,[AVG] = 1
  WHERE [dbo].[T1].[Title] = N'az'

COMMIT TRANSACTION [Tran1]
GO

INSERT コマンドは実行されますが UPDATE コマンドには問題があります。

コマンドのいずれかに実行エラーが発生した場合、両方のコマンドをロールバックするには、どのように実装すればよいでしょうか。

どのように解決するのですか?

try/catchブロックを追加し、トランザクションが成功すれば変更をコミットし、失敗すればトランザクションをロールバックします。

BEGIN TRANSACTION [Tran1]

  BEGIN TRY

      INSERT INTO [Test].[dbo].[T1] ([Title], [AVG])
      VALUES ('Tidd130', 130), ('Tidd230', 230)

      UPDATE [Test].[dbo].[T1]
      SET [Title] = N'az2' ,[AVG] = 1
      WHERE [dbo].[T1].[Title] = N'az'

      COMMIT TRANSACTION [Tran1]

  END TRY

  BEGIN CATCH

      ROLLBACK TRANSACTION [Tran1]

  END CATCH