请教一个事务的基础问题

例:
begin   transaction
          update   storage
          set   Quantity   =   (Quantity   -   @insertquantity)
          where   storageid   =   @storageid
         
          select   @updatestor_error   =   @@ERROR

          update   RealStocking
          set   Quantity   =   (Quantity   -   @insertquantity)
          where   Stockingid   =     @stockingid

          select   @updaterestoc_error   =   @@ERROR

    if   @updatestor_error   =   0   and   @updaterestoc_error   =   0
    begin
commit   transaction
    end
    else
    begin
if   @updatestor_error   <>   0
      print   'an   error   occured   during   update   storage. '
if   @updaterestoc_error   <>   0
      print   'an   error   occured   during   update   reakstocking. '

rollback   transaction
    end

由于刚接触事务,有几个问题不大明白,想请教一下.
1.   我看有些文章说.如果一个事务已commit或rollback结束了.后面的语句仍将继续.
那么,上面的例子中.如果是在commit   transaction结束的.那后面的else还会继续被判断到.只不过条件不符合没有执行里面的语句,是这样吗?
2.   如果是在commit   transaction结束的,那后面ELSE中的rollback   transaction又是对应的那个begin   transaction呢?是不是commit   transaction结束了.SQL   SERVER会自动加上一个看不见的begin   transaction去对应rollback   transaction呢.谢谢

作者: refugeetaotao   发布时间: 2007-01-02

第一个问题和事务没有关系,是if语句的问题
第二个问题是只要是提交了事务或者回滚了事务,就表示事务完成了

作者: leo_lesley   发布时间: 2007-01-02

declare   @number1   int
declare   @number2   int
set   @number1   =   1
set   @number2   =   2
begin   transaction  
select   @number1
rollback   transaction  
                  select   @number2
commit   transaction
那是不是可以这么理解,   上面的这些语句是错误的.因为先执行了rollback   transaction
所以此次事务已经结束了.而后面的commit   transaction由于没有对应到新的begin   transaction(由于第一个begin   transaction已经结束)所以程序上会包错.是这么理解吗?谢谢

作者: refugeetaotao   发布时间: 2007-01-02

你是没有理解if   else,我也是初次接触事务,但也理解了
1楼给出是begin   tran   和   rollback   tran   或者是begin   tran   和   commit   tran对应组成一对

而楼上的就commit   tran   没有对应的begin   tran嘛

作者: bulletCoderHope   发布时间: 2007-01-04

if commit else rollback 正常逻辑啊

作者: mabailin   发布时间: 2011-05-12