Correct use of transactions in SQL Server Correct use of transactions in SQL Server sql-server sql-server

Correct use of transactions in SQL Server


Add a try/catch block, if the transaction succeeds it will commit the changes, if the transaction fails the transaction is rolled back:

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  


At the beginning of stored procedure one should put SET XACT_ABORT ON to instruct Sql Server to automatically rollback transaction in case of error. If ommited or set to OFF one needs to test @@ERROR after each statement or use TRY ... CATCH rollback block.


Easy approach:

CREATE TABLE T(    C [nvarchar](100) NOT NULL UNIQUE,);SET XACT_ABORT ON -- Turns on rollback if T-SQL statement raises a run-time error.SELECT * FROM T; -- Check before.BEGIN TRAN    INSERT INTO T VALUES ('A');    INSERT INTO T VALUES ('B');    INSERT INTO T VALUES ('B');    INSERT INTO T VALUES ('C');COMMIT TRANSELECT * FROM T; -- Check after.DELETE T;