经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "Cannot start more transactions on this session."
来源:cnblogs  作者:潇湘隐者  时间:2019/6/21 8:44:40  对本文有异议

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

 

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

原文链接:http://www.cnblogs.com/kerrycode/p/11057216.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号