【发布时间】:2012-10-22 18:25:25
【问题描述】:
我有一个从 .net 代码调用的存储过程,它对本地表进行更新,然后应该插入到从远程过程调用到链接服务器获得的不同本地表值。
每次我尝试从链接服务器插入结果时都会收到此错误消息。如果我取出 insert into 语句,但保留远程过程调用,它工作正常。这是错误:
System.Data.SqlClient.SqlException:无法执行该操作 由于链接服务器的 OLE DB 提供程序“SQLNCLI10”而执行 “MyLinkedServer”无法开始分布式事务。数据库 返回链接服务器“MyLinkedServer”的提供程序“SQLNCLI10” 消息“事务管理器已禁用对 远程/网络事务。”。
这是我正在使用的简单代码:
INSERT INTO MyLocalTable
EXEC [MyLinkedServer].[MyRemoteDatabase].[dbo].[usp_MySproc] @MyParam
任何想法这里出了什么问题或任何关于如何将远程过程的结果插入本地表的建议?
【问题讨论】:
-
您的“分布式事务协调器”服务是否已启动?
-
我不确定。需要在哪个服务器上启动?远程的还是本地的?在任何一种情况下,我都无法访问它。那将是一个不同的团队(DBA 团队),他们并不热衷于做这样的管理工作。还有其他方法可以远程获取数据并保存在本地吗?
-
IIRC,DTC服务需要在客户端和服务器机器上都启动。
-
我刚刚问了 dba 的人...该服务已启动并在两台机器上运行...还有其他想法吗?
-
您的错误消息显示“事务管理器已禁用对远程/网络事务的支持。”此时,您可能希望 DBA/IT 人员检查 DTC 的配置以查看它们是否允许远程连接,错误消息让我相信它不是
标签: sql-server-2008 stored-procedures linked-server