我在一个事务内调用了对链接服务器的查询的存储过程A,存储过程A内也使用了事务对链接服务器查询,有些业务数据可以执行成功,但是有时候报错:OLE   DB   提供程序   'SQLOLEDB'   无法启动分布式事务错误,只是偶尔报错,大部分是执行成功的。请教大家是什么问题啊,谢谢先了!!!

解决方案 »

  1.   

    SET XACT_ABORT
    --指定当 Transact-SQL 语句产生运行时错误时,sql server自动回滚当前事务。加它试试,看是否那些出错语句在某些时候执行会有问题
      

  2.   

    肯定是存储过程执行中出现了错误,嵌套的事务出错会回滚到最外层的事务,可想而知为什么报错了。
    建议仔细检查就存储过程。
    另外有个方法你可以试试,在存储过程启用事务时,保存事务点,用try catch<应该是sql2005吧>捕获异常,然后回滚到保存的事务点
    XACT_ABORT设置完要恢复默认的设置 
      

  3.   

    SQL2005新增会话状态--
    失败的事务,该事务不可提交,但可保持原有资源上的锁。
    设置SET xact_abort on时,不管是不是服务器错误,都会中断事务,并将事务状态为失败的事务,  
    根据,XACT_STATE()函数返回-1表示该状态
    (1.活动事务且可提交 -1.活动事务但不可提交即失败的事务 0.没有活动事务),
    记住SET xact_abort on后要将xact_abort设置回off
      

  4.   

    那么请教一下如果提交分布式事写begin tran;
    而不是begin distributed tran
    会有什么错误么?