あるサーバーから別のサーバーに数百のストアド プロシージャを移行しているので、各サーバーで 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 テーブルにスクリプト化し、比較する必要があるようです。それは悪い解決策のようです!
これを読んでいただきありがとうございます。どんな助けでも大歓迎です!