0

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

为了做到这一点,我通常会用这个语法来得到的结果为表:然后

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,所以当我尝试把execOpenQuery,查询失败,出现错误:

The operation could not be performed because OLE DB provider "SQLNCLI" 
for linked server "RemoteServer" was unable to begin a distributed transaction. 

有没有什么好的解决方法呢?还是有人有任何聪明的想法,我可以做的事情,使这个过程更快?因为现在看来,我必须在每台服务器上运行SP,将结果编写到tmp表中,然后进行比较。这似乎是一个糟糕的解决方案!

感谢您花时间阅读本文,任何帮助将不胜感激!

回答

0

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

Check out this for instructions - 它适用于任何基于Windows Server 2003或2008