【发布时间】:2011-05-05 20:11:33
【问题描述】:
我正在将数百个存储过程从一台服务器迁移到另一台服务器,因此我想编写一个存储过程来在每台服务器上执行一个 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 表,然后进行比较。这似乎是一个糟糕的解决方案!
感谢您抽出宝贵时间阅读本文,我们将不胜感激!
【问题讨论】:
标签: sql-server sql-server-2005 distributed-transactions openquery