无法为链接服务器的 OLE DB 提供程序“SQLNCLI11”启动嵌套事务

got*_*tqn 3 sql-server linked-server sql-server-2014

我有两个链接的服务器,并且想要创建一个存储过程,该过程SELECT仅从第一台服务器的一个表中获取INSERT数据,并从第二个服务器中获取另一个表中的数据。

程序代码如下所示:

BEGIN TRAN

INSERT INTO [RI].[TEST_DB].[TEST_TABLE] (...)
SELECT ...
FROM [TABLE]

TRUNCATE [TABLE]

COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

链接服务器“RI”的 OLE DB 访问接口“SQLNCLI11”返回消息“无法在此会话上启动更多事务。”。
消息 7395,级别 16,状态 2,过程 usp_test,第 46 行
无法为链接服务器“RI”的 OLE DB 提供程序“SQLNCLI11”启动嵌套事务。
需要嵌套事务,因为 XACT_ABORT 选项设置为 OFF。

Pau*_*ite 5

正如错误消息所暗示的那样,将以下内容添加到您的存储过程中:

SET XACT_ABORT ON;
Run Code Online (Sandbox Code Playgroud)

查看分布式查询和分布式事务