SET XACT_ABORT OFF ; -- > really important to set that to OFF BEGIN DECLARE @Any_error int DECLARE @SSQL varchar(4000) BEGIN TRANSACTION INSERT INTO Table1(Value1) VALUES('Value1') SELECT @Any_error = @@ERROR IF @Any_error<> 0 AND @Any_error<>2627 GOTO ErrorHandler INSERT INTO Table1(Value1) VALUES('Value1') SELECT @Any_error = @@ERROR IF @Any_error<> 0 AND @Any_error<>2627 GOTO ErrorHandler INSERT INTO Table1(Value1) VALUES('Value2') SELECT @Any_error = @@ERROR IF @Any_error<> 0 AND @Any_error<>2627 GOTO ErrorHandler ErrorHandler: IF @Any_error = 0 OR @Any_error=2627 BEGIN PRINT @ssql COMMIT TRAN END ELSE BEGIN PRINT @ssql ROLLBACK TRAN END END