不能在 INSERT-EXEC 语句内部使用 ROLLBACK 语句
-------------------------------------------
老大说了,insert和exec语句内部不能用rollback

解决方案 »

  1.   

    错误提示已经很清楚了, 不是事务处理不好, 是"不能在 INSERT-EXEC 语句内部使用 ROLLBACK 语句"
      

  2.   

    IF NOT EXISTS (SELECT 1 FROM #T3)      --在此执行rollback 
        BEGIN 
         ROLLBACK TRAN --这句报错 
        RETURN   没帖全代码?因该#t3没有数据,总会执行rollabck tran
      

  3.   

    那个存储过程的大概业务就是类似这个判断。我们原来有个存储过程,里面业务很麻烦,后来又在现有基础上增加了一些新需求,如果该以前的存储过程,有很大的风险,因为原来的存储过程暂时还要用,所以写一个新的存储过程,用来增加新的业务,并包含以前的业务,所以在新的存储过程用到了“exec原来的存储过程”,原来的存储过程里有事务,新的里面也有,所以原来的执行回滚就会报错。
      

  4.   

    create table tb(i int)
    insert into tb select 1begin tran
    exec ('
    insert into tb select 2
    select 1/0')
    if @@Error<>0
    rollback tran
    else
    commit transelect * from tb2把原来过程里的begin tran去掉,
    在新键的过程里加事务判断就可以了