4

我试图执行一个存储过程并将其结果简单地插入一个临时表中,我收到以下消息:

无法执行该操作,因为链接服务器“MyServerName”的 OLE DB 提供程序“SQLNCLI”无法开始分布式事务。链接服务器“MyServerName”的 OLE DB 提供程序“SQLNCLI”返回消息“没有处于活动状态的事务。”。

我的查询如下所示:

INSERT INTO #TABLE
EXEC MyServerName.MyDatabase.dbo.MyStoredProcedure Param1, Param2, Param3

确切的列号,名称,问题不是结果。

两台计算机都允许并启动 MSDTC,远程过程调用也是如此。

这些机器不在同一个域中,但我可以从我的机器执行远程查询并获得结果。我什至可以执行存储过程并查看其结果,只是无法将其插入另一个表中。

编辑


哦,我忘了提,存储过程不会触发任何触发器。它只将记录插入到它自己创建的用于数据处理的临时表中。

4

4 回答 4

5

好吧,在学习了很多教程并对其进行了大量研究之后,我已经更改了我认为让它工作所需的所有配置,但它仍然没有。

今天我们不得不在我们的开发服务器上强制重启电源,因为没有中断,当我们启动服务器时,你猜怎么着?有用!

因此,为了记录,我更改了一些特定的 MSDTC 配置,将其添加为链接服务器并允许 RPC IN 和 OUT,并将 RPC 配置更改为“不需要身份验证”或类似的东西。

我记得在某处读到,在您更改此配置后,需要重新启动,即使 Windows 说它已经重新启动了服务。

自从我更改它以来,我已经像...一样重新启动了我的服务器两次,但它仍然无法正常工作。但是就像今天一样,在完全关闭和打开之后,它就可以工作了!

至于语法,我保持不变。

于 2010-05-31T13:46:29.917 回答
1

您还必须检查 IP 网络配置中的 DNS 名称解析。

例如,您有一个名为 server-a.mydomain.com 的服务器和另一个名为 server-b.otherdomain.com 的服务器,登录到 server-a 并执行“ping server-b”(没有域)。

如果它响应“Ping 请求找不到主机服务器-b。请检查名称并重试。” 那就是问题所在。

转到控制面板>网络连接>右键单击网卡>属性> Internet协议>属性>高级> DNS>按顺序附加此DNS后缀。并在此处添加本地域:mydomain.com 然后添加远程域:otherdomain.com 单击确定直到退出

现在,如果您执行“ping server-b”,它应该会响应如下内容:

ping server-b.otherdomain.com [192.168.1.2] 32 字节数据: 来自 192.168.1.2 的回复:字节=32 时间=12ms TTL=64 来自 192.168.1.2 的回复:字节=32 时间=9ms TTL=64

现在再次尝试执行分布式事务。

于 2010-12-16T21:34:46.497 回答
0

我有幸在链接服务器连接的两端安全地重新启动 SQL Server 服务。我不必重新启动机器。

于 2020-02-03T15:10:40.717 回答
-2

您是否尝试过使用 openquery?

insert into table select * from openquery(myservername, 'exec mydatabase.dbo.mystoredproc param1, param2, param3')
于 2010-05-28T20:26:44.087 回答