Я перенес несколько сотен хранимых процедур с одного сервера на другой, поэтому я хотел написать хранимую процедуру для выполнения 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, а затем выполнить сравнение. Это кажется плохим решением!
Спасибо, что нашли время, чтобы прочитать это, и любая помощь будет принята с благодарностью!