我正在将数百个存储过程从一台服务器迁移到另一台服务器,所以我想编写一个存储过程来在每台服务器上执行一个 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 表,然后进行比较。这似乎是一个糟糕的解决方案!
感谢您抽出宝贵时间阅读本文,任何帮助将不胜感激!