mssql sqlserver sql脚本中事务回滚的四种方法分享


摘要:
下文通过举例的方式,分享在sql脚本编写中,显示和自动事务回滚的处理方法,如下所示:
实验环境:sql server 2008 R2


例:

   ---数据表准备:
     create table test
	 (keyId int identity,info varchar(100))
     go
	 
	---方法1:使用 rollback tran 回滚对应的事务
      begin tran  
	    insert into test (info) values
        ('www.maomao365.com'),
		('sql教程'),
		('sql专用博客')
       
	   rollback tran    ---回滚事务中的所有语句
	   return;

    
	---方法2:通过 SET XACT_ABORT属性开启,当事务中任何脚本出现错误,则所有脚本会自动回滚,如下所示
	 SET XACT_ABORT ON
      begin tran  
	    insert into test (info) values('www.maomao365.com')
		insert into test (info) values('sql教程'234)
		insert into test (info) values('sql专用博客')
       
	   commit tran     
	   return;
 
    ---方法3:使用try catch捕捉异常,然后自动回滚,如下所示
	 
     Begin Try
        begin tran  
	    insert into test (info) values('www.maomao365.com')
		insert into test (info) values('sql教程'234)
		insert into test (info) values('sql专用博客')
       
	   commit tran 
    End Try
    Begin Catch
    Rollback TransAction
    End Catch
 

    ---方法4:使用系统变量获取错误信息,然后通过goto标签跳转执行回滚事务
	    begin tran  
	    insert into test (info) values('www.maomao365.com') 
		   if @@error <>0 begin goto err; end
		insert into test (info) values('sql教程'234)
		   if @@error <>0 begin goto err; end
		insert into test (info) values('sql专用博客')
		   if @@error <>0 begin goto err; end
       
	   commit tran     
	   return;

	   err:
	   rollback tran
	   return;

    go
	truncate table test
	drop     table test