declare @tranname varchar(32)
select @tranname='mytran'
begin tran @tranname
         delete from student where xu_lie=3
save tran save_point
         delete from stuok where score=6000
if @@error=0 
   begin
     rollback tran save_point
     commit tran mytran
   end
else
    commit tran mytran

解决方案 »

  1.   

    @@error 是判断前一条语句是否出错, 所以要在事务中的每条语句用 @@error 判断
      

  2.   

    @@error=0 
    是判断上一条是否出错, = 0 表示没出错, 也就是  delete from stuok where score=6000  成功按照写的语句, 意思是 ( 似乎逻辑和正常的有点不一样)
    如果 delete from stuok where score=6000 成功
      则回滚 delete from stuok where score=6000 的操作
      只做 delete from student where xu_lie=3 如果 delete from stuok where score=6000 失败
      则提交所有的事务, 即要求完成所有的操作
      

  3.   


    @@error=1
      @@error=2
      @@error=3
       请问一下这些都是什么意思???谢谢.
      

  4.   

    @@error=数字,后面的数字都是微软定义的错误,也许可以到微软那查到!!好像有5000这个错误,不过是自己定义的错误!
      

  5.   

    @@error 是Sqlserver的执行语句时的返回值  根据这个可以知道语句执行是否出错了,具体的返回值 可以去微软看帮助
      

  6.   

    你去这里看吧!http://www.cnblogs.com/czh-liyu/archive/2007/12/22/1010164.html
      

  7.   

    去这看,更详细!http://hi.baidu.com/%CE%B0%CE%B0%C4%D0%B5%C4blog/blog/item/6e7d6f35cf299648251f14e9.html
      

  8.   

    @@error是返回上一个T-SQL语句的错误号:
    楼上的地址真的很详细