Begin Transaction:开始一个事务;
Commit Transaction:提交事务;
Rollback Transaction:回滚事务。
其中Commit Transaction 与Rollback Transaction 都必须有对应的Begin Transaction 才能正确被执行。
如:
Begin Tran
……
Rollback Tran
Commit Tran
以上事务只执行了回滚操作。执行Commit Tran系统会返回3902错误,即@@Error=3902,COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
Begin Tran
……
Commit Tran
Rollback Tran
以上事务员执行了提交事务操作。执行Rollback Tran系统会返回3903错误,即@@Error=3903,ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
实例:使用@@Error返回值来控制回滚
设有表a,有字段num (int),name (varchar(20));表b,有字段num (int),Add (varchar(50))。以下是一个存储过程,使用了@@Error的返回值来控件事件回滚:
CREATE PROCEDURE [dbo].[TranTest] @num int,@name varchar(20),@Add varchar(20) AS DECLARE @ErrorA int,@ErrorB int begin transaction aa insert into a values(@num,@name) SELECT @ErrorA = @@error insert into b values(@num,@Add) SELECT @ErrorB = @@error if @ErrorA>0 or @ErrorB>0 begin Rollback transaction aa end else commit transaction aa GO
或
CREATE PROCEDURE [dbo].[TranTest] @num int,@name varchar(20),@Add varchar(20) AS DECLARE @Err int begin transaction aa insert into a values(@num,@name) if @@error>0 begin SELECT @Err = 1 end insert into b values(@num,@Add) if @@error>0 begin SELECT @Err = 1 end if @Err>0 begin Rollback transaction aa end else commit transaction aa GO