MSSQL(sql server)存储过程通用写法—事务框架


前言:
下文将展示MSSQL事务型存储过程的通用写法


写法一 @@error 错误判断的方式

   create proc 存储过程名称
   @参数名称  参数类型,
   ....
   as
   begin
        SET XACT_ABORT ON   ---打开出错事务回滚

        declare @err int ,@rowCount int 
	begin tran 事务名称  ---打开事务

         [sql语句1]
	 select @err=@@error,@rowCount=@@rowCount  --获取当前sql语句所影响的行数和是否出错
	 if @err <>0
	 begin
	  goto err;//回滚事务
	 end


	if @rowCount <>预计影响的行数
	 begin
	  goto err;//回滚事务
	 end


 
	[sql语句2]
	 select @err=@@error,@rowCount=@@rowCount  --获取当前sql语句所影响的行数和是否出错
	 if @err <>0
	 begin
	  goto err;//回滚事务
	 end


	if @rowCount <>预计影响的行数
	 begin
	  goto err;//回滚事务
	 end
 
	...
 
	commit tran 事务名称  ---提交事务
	return;

	err:
	rollback tran 事务名称 ---回滚事务
	return;

   end
 


写法二 begin try begin catch的方式

   create proc 存储过程名称
   @参数名称  参数类型,
   ....
   as
   begin
        SET XACT_ABORT ON   ---打开出错事务回滚

        declare @err int ,@rowCount int 

	begin try 
	begin tran 事务名称  ---打开事务

         [sql语句1]
          /*当 sql执行错误时,自动转入 begin catch 部分执行*/
	 ...
 
	commit tran 事务名称  ---提交事务
	return;

	end try

	begin catch 
 
	rollback tran 事务名称 ---捕捉错误回滚事务
	return;
 
        end catch

   end