Sql server 从SQL Server存储过程Resultls中选择

Sql server 从SQL Server存储过程Resultls中选择,sql-server,sql-server-2005,distributed-transactions,openquery,Sql Server,Sql Server 2005,Distributed Transactions,Openquery,我正在将数百个存储过程从一台服务器迁移到另一台服务器,因此我想编写一个存储过程来在每台服务器上执行一个SP,并比较输出的差异 为此,我通常会使用以下语法将结果放入表中: select * into #tmp1 from OpenQuery(LocalServer,'exec usp_MyStoredProcedure') select * into #tmp2 from OpenQuery(RemoteServer,'exec usp_MyStoredProcedure') 然后我将它们合并并

我正在将数百个存储过程从一台服务器迁移到另一台服务器,因此我想编写一个存储过程来在每台服务器上执行一个SP,并比较输出的差异

为此,我通常会使用以下语法将结果放入表中:

select * into #tmp1 from OpenQuery(LocalServer,'exec usp_MyStoredProcedure')
select * into #tmp2 from OpenQuery(RemoteServer,'exec usp_MyStoredProcedure')
然后我将它们合并并进行计数,以获得结果中有多少行不同:

select * into #tmp3
from ((select * from #tmp1) union (select * from #tmp2))

select count(*) from #tmp1
select count(*) from #tmp3
但是,在本例中,我的存储过程包含一个OpenQuery,因此当我尝试将exec放入OpenQuery时,查询失败,错误如下:

The operation could not be performed because OLE DB provider "SQLNCLI"
for linked server "RemoteServer" was unable to begin a distributed transaction.
有什么好的解决办法吗?或者有人有什么聪明的想法,我可以做的事情,使这一进程进行得更快?因为现在,我似乎必须在每台服务器上运行SP,将结果编写到tmp表中,然后进行比较。这似乎是一个糟糕的解决方案


感谢您抽出时间阅读此文章,我们将非常感谢您的帮助

我认为你的方法会奏效-你只需要启动MSDTC。如果禁用分布式事务协调器DTS服务或禁用网络DTC访问,则会发生此行为。默认情况下,在Windows中禁用网络DTC访问。如果运行和配置正确,OLE DB提供程序将能够启动分布式事务

-它适用于任何Windows Server 2003或2008。

与您的问题类似。