一种是用TRY...CATCH语句,例:
---这仅仅是实例
create procedure [dbo].[MyTryTran] --创建存储过程
--@toID int, --接收转账的账户
--@fromID int , --转出自己的账户
--@momeys money --转账的金额
as
begin transaction
BEGIN TRY
select 1/0
insert into t_Sex (FID,FSex) values (3,'na')
commit transaction
END TRY
BEGIN CATCH
begin
rollback transaction
end
END CATCH
第二种是捕捉error错误
create procedure [dbo].[MyTran] --创建存储过程,定义几个变量 --@toID int, --接收转账的账户 --@fromID int , --转出自己的账户 --@momeys money --转账的金额 as begin transaction declare @errorSum int --定义变量,用于累计事务执行过程中的错误 set @errorSum=0 select 1/0 set @errorSum=@errorSum+@@error --累计是否有错误 insert into t_Sex (FID,FSex) values ('3','n') set @errorSum=@errorSum+@@error --累计是否有错误 if @errorSum>0 begin rollback transaction end else begin commit transaction end
有一种错误的方式,请看:
alter procedure [dbo].[MyErrorTran] as begin transaction select 1/0 insert into t_Sex (FID,FSex) values ('3','n') commit transaction if @@error>0 rollback transaction--事实上不管用,因为@@error只对上一条语句管用,所以在本例中尽管发生了错误,但还是不会回滚