web-dev-qa-db-ja.com

クエリにサーバーオプションの「リモートプロシージャトランザクションの昇格」を無視させ、リモートプロシージャトランザクションを昇格させないようにすることは可能ですか?

リモートリンクサーバーでストアドプロシージャを実行し、結果をローカル一時テーブルに挿入する特定のクエリがあります。

リモートプロシージャトランザクションを昇格させたくありませんが、サーバーを再構成できません。

クエリヒントまたはリモートプロシージャトランザクションを昇格させないようにするための何らかの方法はありますか?

編集:私が尋ねる理由は、リモートプロシージャコールを実行しようとすると、次のエラーが発生するためです。

リンクサーバー "MyRemotelyLinkedServer"のOLE DBプロバイダー "SQLNCLI11"は、メッセージ "トランザクションマネージャーがリモート/ネットワークトランザクションのサポートを無効にしました。"を返しました。メッセージ7391、レベル16、状態2、プロシージャspMyRemoteProcedure、行64 [バッチ開始行15] OLEリンクサーバー "MyRemotelyLinkedServer"のDBプロバイダー "SQLNCLI11"ができなかったため、操作を実行できませんでした分散トランザクションを開始します。

これを修正するためにリンクサーバーオプションで[分散トランザクションのプロモーションを有効にする]をfalseに設定できることはわかっていますが、このコンテキストでサーバーオプションを変更することは許可されていないため、回避策を探しています。

1
J.D.

クエリヒントまたはリモートプロシージャトランザクションを昇格させないようにするための何らかの方法はありますか?

いいえ、ありませんが、現在次のようなことをしている場合:

INSERT #Temp
EXECUTE schema_name.procedure_name AT linked_server;

または

INSERT #Temp
EXECUTE linked_server.db_name.schema_name.procedure_name;

あなたはそれを使ってそれを回避することができます:

INSERT #Temp
SELECT column_list 
FROM OPENQUERY(linked_server, 'EXECUTE db_name.schema_name.procedure_name');

単一の結果セットを返す単純な手順を使用していると仮定します。 OPENQUERYを使用してスクリプトを実行する の回答で述べたように、SET NOCOUNT ONをプロシージャに追加する必要がある場合もあります。

2
Paul White 9