从“SQL Server存储过程结果”中选择

时间:2011-05-05 20:11:34

标签: 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')

然后我会将它们联合起来并进行计数,以获得结果中有多少行不同:

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表中,然后进行比较。这似乎是一个糟糕的解决方案!

感谢您抽出宝贵时间阅读本文,并且非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)