我正在使用 SQL Server 2014。我想EXEC (@remotecmd) AT [server_name];
在##eapb
. 我的代码是
insert into ##eapb
EXEC (@remotecmd) AT [ADSQLDB3S\DEV];
但我得到了错误:
链接服务器“server_name”的 OLE DB 提供程序“SQLNCLI11”返回消息“事务管理器已禁用对远程/网络事务的支持。”。
消息 7391,级别 16,状态 2,第 71 行
操作无法执行,因为链接服务器“server_name”的 OLE DB 提供程序“SQLNCLI11”无法开始分布式事务。
如果我删除insert into ##eapb
,我没有错误。
链接服务器的RPC Out选项设置为True。
在我的测试中(针对同一服务器上的另一个实例,而不是在单独的服务器上),如果我将启用 RPC 的分布式事务提升的链接服务器选项设置为“False”,则此方法有效。您可以通过以下命令完成此操作:
这与分布式事务处理协调器 (MSDTC) 一起工作,同时开启(运行)和关闭(停止)。
如果您通常需要将“remote proc transaction Promotion”选项设置为“True”,并且如果将其设置为“False”允许它
INSERT...EXEC
工作,那么您可以设置另一个具有所有相同属性的链接服务器,除了这个选项是不同的。禁用“remote proc trans Promotion”的主要缺点是,它不是远程服务器上的事务。因此,如果那里发生错误,您将不会在本地插入数据(显然),但如果有任何远程运行的 DML 语句,那些仍然可以提交(取决于它是单个语句还是多个语句)。尽管如此,您仍然可以/应该在远程查询上使用正确的事务处理(即使用
TRY...CATCH
构造):PS 该
RPC Out
选项需要启用/真。上面没有提到这一点,因为根据对该问题的评论,此选项已正确设置。我可以用:
- 就这样!!!