你应该把事务放在动态sql语句内部,而不是外边

解决方案 »

  1.   

    exec(@strInsSqlA)--插入主表数据
    exec(@strInsSqlB)--插入子表数据
    IF (@@ERROR=0)
      COMMIT TRAN
    ELSE
      ROLLBACK TRAN=========>改为:
    declare @err1 int,@err2 int
    exec(@strInsSqlA)--插入主表数据
    set @err1=@@error
    exec(@strInsSqlB)--插入子表数据
    set @err2=@@error
    IF (@err1=0 and @err2=0)
      COMMIT TRAN
    ELSE
      ROLLBACK TRAN
      

  2.   

    --or
    if @flag = 1
       begin
        exec(@strDelSqlB)--删除子表数据
        exec(@strDelSqlA)--删除主表数据
       end

    exec(@strInsSqlA)--插入主表数据
    exec(@strInsSqlB)--插入子表数据
    ===>改为:
    if @flag = 1
       begin
        exec(@strDelSqlB+' '+@strdelsqla)    
       end

    exec(@strInsSqlA+' '+@strinsqlb)