如果批处理中出现运行时语句错误(如违反约束),那么 SQL Server 中默认的行为将是只回滚产生该错误的语句。可以使用 SET XACT_ABORT 语句改变该行为。在 SET XACT_ABORT ON 语句执行之后,任何运行时语句错误都将导致当前事务自动回滚。编译错误(如语法错误)不受 SET XACT_ABORT 的影响
alter procedure pro_test as declare @err1 int,@err2 int,@err3 int,@err4 int begin tran --step 1 set @err1=@error --step 2
set @err2=@error --step 3 set @err3=@error --step 4 set @err4=@error if (@err1+@err2+@err3+@err4)=0 COMMIT TRAN ELSE ROLLBACK TRAN
alter procedure pro_test as declare @err1 int,@err2 int,@err3 int,@err4 int begin tran --step 1 set @err1=@@error --step 2
set @err2=@@error --step 3 set @err3=@@error --step 4 set @err4=@@error if (@err1+@err2+@err3+@err4)=0 COMMIT TRAN ELSE ROLLBACK TRAN
有错事务就会回滚
as
declare @err1 int,@err2 int,@err3 int,@err4 int
begin tran
--step 1 set @err1=@error
--step 2
set @err2=@error
--step 3 set @err3=@error
--step 4 set @err4=@error if (@err1+@err2+@err3+@err4)=0
COMMIT TRAN
ELSE
ROLLBACK TRAN
as
declare @err1 int,@err2 int,@err3 int,@err4 int
begin tran
--step 1 set @err1=@@error
--step 2
set @err2=@@error
--step 3 set @err3=@@error
--step 4 set @err4=@@error if (@err1+@err2+@err3+@err4)=0
COMMIT TRAN
ELSE
ROLLBACK TRAN