以下是两个存储过程的写法,哪个写法更好?我知道写法二是正确的,可缺点是如果操作多张表的话要定义很多的@err1、@err2..的中间变量,太麻烦了,方法一如果回滚,@ret返回的是多少?大家的写法是怎样的?好像不用@@error也可以?
---------------------------------
写法一:
alter PROC sp_t
(
@ret int output
)
ASbegin tran
 update t set t=123
 if(@@Error<>0)
   begin
    rollback tran
    set @ret=1
   end commit tran
 set @ret=0
---------------------------------
写法二:
alter PROC sp_t
(
@ret int output
)
AS
decalre @err1 int
begin tran
 update t set t=123
 set @err1=@@error if(@err1<>0)
   begin
    commit tran
    set @ret=0
   end
 else
   begin
     set @ret=1
     rollback tran
   end

解决方案 »

  1.   

    可以这样写begin tran 
    update t set t=123 
    if @@error<>0 goto err_handleupdate t1 set t1=123 
    if @@error<>0 goto err_handle
    ...
    commit tran
    set@ret=0
    return
    err_handle:
        rollback tran 
        set @ret=1 
      

  2.   

    方法一如果回滚,@ret返回的是多少?返回0说明方法一根本不行
    二楼说明了方法二也根本不行
      

  3.   

    在存储过程中编写正确的事务处理代码(SQL Server 2000 & 2005)
    http://www.sqlstudy.com/sql_article.php?id=2008060701