0

我正在将数百个存储过程从一台服务器迁移到另一台服务器,所以我想编写一个存储过程来在每台服务器上执行一个 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 表,然后进行比较。这似乎是一个糟糕的解决方案!

感谢您抽出宝贵时间阅读本文,任何帮助将不胜感激!

4

2 回答 2

0

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

查看此内容以获取说明- 它适用于任何 Windows Server 2003 或 2008。

于 2011-05-05T20:24:06.450 回答
0

类似于你的问题。 将存储过程的结果插入临时表

于 2011-05-05T20:30:44.207 回答