Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链接服务器SQLNCLI问题&引用;“没有活动的交易”;_Sql_Sql Server_Sql Server 2005_Linked Server_Sqlncli - Fatal编程技术网

链接服务器SQLNCLI问题&引用;“没有活动的交易”;

链接服务器SQLNCLI问题&引用;“没有活动的交易”;,sql,sql-server,sql-server-2005,linked-server,sqlncli,Sql,Sql Server,Sql Server 2005,Linked Server,Sqlncli,我试图执行一个存储过程,并简单地将其结果插入一个临时表中,我得到以下消息: 无法执行该操作,因为OLE DB提供程序“SQLNCLI” 对于链接服务器,“MyServerName”无法开始分布式访问 交易链接服务器的OLE DB提供程序“SQLNCLI” “MyServerName”返回消息“没有活动的事务” 我的查询如下所示: INSERT INTO #TABLE EXEC MyServerName.MyDatabase.dbo.MyStoredProcedure Param1, Param2

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

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

我的查询如下所示:

INSERT INTO #TABLE
EXEC MyServerName.MyDatabase.dbo.MyStoredProcedure Param1, Param2, Param3
准确的列号、名称,问题不在于结果

两台计算机都允许并启动MSDTC,还可以远程过程调用

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

编辑



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

您尝试过使用openquery吗

insert into table select * from openquery(myservername, 'exec mydatabase.dbo.mystoredproc param1, param2, param3')

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

今天,我们不得不在开发服务器上强制重新启动电源,因为一个错误的禁止中断,当我们启动服务器时,你猜怎么着?它起作用了

因此,为了记录在案,我更改了一些特定的MSDTC配置,将其添加为链接服务器并允许RPC进出,并更改了“无需身份验证”之类的RPC配置

我记得在某个地方读到,在您更改此配置后,需要重新启动,尽管Windows说它已经重新启动了服务

我重新启动了我的服务器,就像。。。自从我换了两次,它还是不起作用。但就像今天一样,在完全关闭和打开之后,它工作了


至于语法,我保持不变。

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

例如,您有一个名为server-a.mydomain.com的服务器和另一个名为server-b.otherdomain.com的服务器,登录服务器-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时间=12毫秒TTL=64来自的回复 192.168.1.2:字节=32时间=9ms TTL=64


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

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

从MSDN文档:()在SQL Server 2000及更高版本中,OPENQUERY不能用于在链接服务器上执行扩展存储过程。但是,可以使用由四部分组成的名称在链接服务器上执行扩展存储过程。例如:EXEC SeattleSales.master.dbo.xp\msveroriginal poster没有具体说明它是扩展存储过程还是常规存储过程。