链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "Cannot start more transactions on this session."


开发同事反馈一个SQL Server存储过程执行的时候,报链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "Cannot start more transactions on this session."。这个存储过程,个人做了一个精简和脱敏处理后如下:

 

BEGIN TRY
    BEGIN TRANSACTION    
                    
    INSERT INTO OPENDATASOURCE('SQLOLEDB', 'DATA SOURCE=XXX.XXX.XX.XXX;USER ID=XXX;PASSWORD=XXX).XXX.DBO.XXX 
    (........)
    SELECT ..... FROM .....
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
      IF @@TRANCOUNT>0
        ROLLBACK
         .........
END CATCH

 

clip_image001

 

对于这种问题,是因为:对于大多数 OLE DB 访问接口(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。 唯一不需要该选项的情况是在提供程序支持嵌套事务时。具体参考官方文档:

 

XACT_ABORT must be set ON for data modification statements in an implicit or explicit transaction against most OLE DB providers, including SQL Server. The only case where this option is not required is if the provider supports nested transactions."

 

在存储过程里面的BEGIN TRANSACTION前设置SET XACT_ABORT ON;后问题即可解决。

 

 

 

参考资料:

 

https://docs.microsoft.com/zh-cn/sql/t-sql/statements/set-xact-abort-transact-sql?view=sql-server-2017


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 无法获取链接服务器 "XXX" 的 OLE DB 访问接口 "SQLNCLI10" 的架构行集 "DBSCHEMA_TABLES_INFO"。该访问接口支持该接口,但使用该接口时返回了失败代码。 SqlServer链接服务器中报错:链接服务器"test"的 OLE DB 访问接口 "SQLNCLI11" 返回了消息 "无法完成延迟准备。"。 链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的错误"。 无法启动链接服务器"XXX DB Link"的 OLE DB 访问接口 "SQLNCLI11" 的嵌套事务。由于 XACT_ABORT 选项已设置为 OFF,因此必须使用嵌套事务。链接服务器"XXX DB Link"的 OLE DB 访问接口 "SQLNCLI11" 返回了消息"无法在此会话中启动更多的事务"。 无法执行该操作,因为链接服务器 "XXX" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务。 链接服务器 OLE DB 访问接口 'SQLNCLI10' 返回的数据与列 '[LINK_SCT1].[SCT].[dbo].[v_Employee_Company].empname' 所需的数据长度不匹配。所需的(最大)数据长度为 10,但返回的数据长度为 11。 导入导出数据库数据,报错,链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的错误"。 链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的错误"。[手稿] 没有活动事务 链接服务器的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务 无法执行该操作,因为链接服务器 "xxxxx" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM