首先要看你UPDATE用的是什么事物。按照正常的逻辑
1。回滚 trant2。执行2处2。同上3。同上4。1不回。最后,你没有END!?

解决方案 »

  1.   

    还有,一个IFELSE里处理多个任务,加上括号,把它们括到一起
      

  2.   

    GZ
    可以具体做个测试
    但好像SQL SERVER的嵌套事务并不很安全
      

  3.   

    但好像SQL SERVER的嵌套事务并不很安全
                                   ^^^^可靠
      

  4.   

    to :fallstone(天蓝) 
    第4个问题可能错了。我做了个实验。
      

  5.   

    begin tran t1
      begin tran t2
      save tran t2
        update tableA set .......
      if @@error<>0
        rollback tran t2
      commit tran t2 update tableB set .....     
    if @@error<>0 
      rollback tran t1
    commit tran t1
      

  6.   

    我所说的事务嵌套没屁用,
    主要是因为内部的COMMIT除了让嵌套级别减1外,不做任何操作。“设置保存点”可能是MS猛的发现不能实现用户的功能而另加的。(开玩笑的:))嵌套真见鬼!!
      

  7.   

    begin tran t1             --b1处
      begin tran t2           --b2处
      save tran t2
        update tableA set .......--1处
      if @@error<>0
        rollback tran t2      --r2处
    commit tran t2        --c2处
    update tableB set .....     --2处
    if @@error<>0 
      rollback tran t1         --r1处
    commit tran t1           --c1处问,
        1.如果1处失败,会回滚到何处?回滚后那何处开始执行?回滚到 save tran t2,从commit tran t2下面开始执行    2.如果1处tableA有触发器,而触发器中失败,会回滚到何处?回滚后那何处开始执行?同上    3.如果1处tableA有触发器,而触发器更新表TableC,TableC有也有触发器,  在TableC的触发器中失败,会回滚到何处?同上    4.如果1处正常。C2处提交成功。而2处失败。那么1处提交的数据会不会回滚?全部回滚
      

  8.   

    Microsoft&reg; SQL Server&#8482; 忽略提交内部事务。根据最外部事务结束时采取的操作,将提交或者回滚事务。如果提交外部事务,则内层嵌套的事务也会提交。如果回滚外部事务,则不论此前是否单独提交过内层事务,所有内层事务都将回滚。