分享

分布式事务已完成。请将此会话登记到新事务或 NULL 事务中

 顺溜的书架 2015-12-06

解决方法:


1、查看参与事务范围中的各相关服务器(譬如中间层服务器、数据库服务器、可能还有链接服务器)的MSDTS的入站、出站选项是否都已设置为“允许”;如下图



2、数据库端代码(通常是存储过程、触发器)的开头是否设置了XACT_ABORT选项,如下代码:


SET XACT_ABORT ON;


另:关于存储过程常用的几个选项用途


SET NOCOUNT ON/OFF:当SET NOCOUNT为ON时,不返回计数(执行完后会返回SQL影响行数),此时将不会;当设置为OFF时,返回计数。 如果存储过程中包含的SQL语句并不返回许多实际的数据,可以将之设为ON,可以大量减少网络流量,而可显著提高性能。


SET XACT_ABORT ON/OFF: 当SET XACT_ABORT为ON时,如果执行Transact-SQL语句出错时,会立即停止执行,并回滚数据; 当设为OFF时,有时只回滚产生错误的SQL语句,而事物将继续处理,如果错误很严重,那么即使设置为OFF,也会回滚整个事务,OFF是默认设置。 编辑错误或语法错误,将不设XACT_ABORT的影响。


对于大多数 OLE DB 访问接口(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。 SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。


SET TRANCACTION ISOLATION LEVEL READ UNCOMMITTED/COMMITTED: 此为设置一个事务的隔离级别,一次只能设置一个隔离级别选项,并且始终对那个连接有效,直到显示更改设置选项。 事务中执行的所有读取操作都会在指定的隔离级别的规则下运行,除非语句的 FROM 子句中的表提示为表指定了其他锁定行为或版本控制行为。


当属性设为UNCOMMITTED时,指定语句可以读取已有其他事务修改而未提交的行;设置此选项之后,可以读取未提交的修改,这种读取称为脏读。在事务结束之前,可以更改数据中的值,行也可以出现在数据集中或从数据集中消失。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 NOLOCK 相同。这是隔离级别中限制最少的级别。 当属性设为COMMITTED时,指定语句不能读取已有其他事务修改而未提交的行,这样可以避免脏读。其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取和幻像数据。该选项是 SQL Server 的默认设置。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多