0

あるサーバーから別のサーバーに数百のストアド プロシージャを移行しているので、各サーバーで 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ため、 を に入れようとするexecOpenQuery、クエリは次のエラーで失敗します。

The operation could not be performed because OLE DB provider "SQLNCLI"
for linked server "RemoteServer" was unable to begin a distributed transaction.

これに対する良い回避策はありますか?または、このプロセスをより迅速に進めるために私ができることについて、何か賢いアイデアを持っている人はいますか? 現時点では、各サーバーで SP を実行し、結果を tmp テーブルにスクリプト化し、比較する必要があるようです。それは悪い解決策のようです!

これを読んでいただきありがとうございます。どんな助けでも大歓迎です!

4

2 に答える 2

0

あなたの質問に似ています。 ストアドプロシージャの結果を一時テーブルに挿入します

于 2011-05-05T20:30:44.207 に答える
0

あなたの方法はうまくいくと思います-MSDTCを開始するだけです。この現象は、分散トランザクション コーディネーター (DTS) サービスが無効になっている場合、またはネットワーク DTC アクセスが無効になっている場合に発生します。デフォルトでは、ネットワーク DTC アクセスは Windows で無効になっています。OLE DB プロバイダーを実行して適切に構成すると、分散トランザクションを開始できます。

手順については、こちらをご覧ください。Windows Server 2003 または 2008 に適用されます。

于 2011-05-05T20:24:06.450 に答える