Выберите из результатов хранимых процедур SQL Server - PullRequest
0 голосов
/ 06 мая 2011

Я перенес несколько сотен хранимых процедур с одного сервера на другой, поэтому я хотел написать хранимую процедуру для выполнения 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 голосов
/ 06 мая 2011
0 голосов
/ 06 мая 2011

Я думаю, ваш метод сработает - вам просто нужно запустить MSDTC. Это происходит, если служба координатора распределенных транзакций (DTS) отключена или доступ к DTC по сети отключен. По умолчанию сетевой DTC-доступ отключен в Windows. При правильной работе и настройке поставщик OLE DB сможет запустить распределенную транзакцию.

Проверьте это для инструкций - это относится к любой Windows Server 2003 или 2008.

...