代码好几页,算了,太长,我只想知道有没有什么参数设置,比如:SET NOCOUNT ON

解决方案 »

  1.   

    是不是这个:set SET XACT_ABORT { ON | OFF }
    这个也不是完全的什么都回滚的
    看你错误的严重程度了
    比如说调用不存在的表:
    create proc proc_1 
    as
    SET XACT_ABORT ON
    begin tran
    select * from noexiststable
    if @@error>0 goto err_1
    commit tran 
    return(0)
    err_1:
     if @@trancount>0
      rollback tran
      return(-1)
    exec proc_1
    /*
    返回:
    服务器: 消息 208,级别 16,状态 1,过程 proc_1,行 5
    Invalid object name 'noexiststable'.
    服务器: 消息 266,级别 16,状态 1,过程 proc_1,行 12
    Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 0, current count = 1.
    */
    可见错误处理没有执行
      

  2.   

    SET XACT_ABORT ON ,我个人觉得,由于mssql的触发器比较特殊,就是一次触发,比如你的批量递交,触发器只执行一次,你在中间调用存储过程,你在其中有有什么动作,是否对你插入的每一条数据产生如期的影响,我觉得你应该小心。检查是否是这方面的原因引起的。