SQL Server でのトランザクションの正しい使用方法 質問する

SQL Server でのトランザクションの正しい使用方法 質問する

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コマンドに問題があります。

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

ベストアンサー1

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  

おすすめ記事