4

ストアド プロシージャを実行し、その結果を一時テーブルに挿入しようとすると、次のメッセージが表示されます。

リンク サーバー "MyServerName" の OLE DB プロバイダー "SQLNCLI" が分散トランザクションを開始できなかったため、操作を実行できませんでした。リンク サーバー "MyServerName" の OLE DB プロバイダー "SQLNCLI" から、"アクティブなトランザクションはありません" というメッセージが返されました。

私のクエリは次のようになります。

INSERT INTO #TABLE
EXEC MyServerName.MyDatabase.dbo.MyStoredProcedure Param1, Param2, Param3

正確な列番号、名前、問題は結果ではありません。

MSDTC は許可され、両方のコンピューターで開始され、リモート プロシージャ コールも開始されます。

マシンは同じドメインにありませんが、自分のマシンからリモート クエリを実行して結果を取得できます。ストアド プロシージャを実行してその結果を確認することもできますが、別のテーブルに挿入することはできません。

編集


ああ、言い忘れましたが、ストアド プロシージャはトリガーを起動しません。データ処理のために自身で作成する一時テーブルにレコードを挿入するだけです。

4

4 に答える 4

5

さて、多くのチュートリアルに従い、それについて多くの調査を行った後、機能するために必要と思われるすべての構成を変更しましたが、それでも変更されませんでした.

今日、ノーブレークに障害があったため、開発サーバーの電源を強制的に再起動する必要がありました。サーバーを起動したとき、何を推測しますか? できます!

念のため、特定の MSDTC 構成を変更し、それをリンク サーバーとして追加して、RPC IN と OUT を許可し、RPC 構成を「NO AUTHENTICATION REQUIRED」などに変更しました。

この構成を変更した後、再起動が必要であるとどこかで読んだことを覚えています。

サーバーを変更してから... 2回再起動しましたが、それでも機能しませんでした。しかし、今日のように、完全にオフにしてからオンにすると、機能します!

構文に関しては、同じままにしました。

于 2010-05-31T13:46:29.917 に答える
1

また、IP ネットワーク構成で DNS 名前解決を確認する必要があります。

たとえば、server-a.mydomain.com と呼ばれるサーバーと server-b.otherdomain.com と呼ばれる別のサーバーがあり、server-a にログインして "ping server-b" を実行します (ドメインなしで)。

「Ping 要求でホスト サーバー b が見つかりませんでした。名前を確認して、もう一度やり直してください。」と応答した場合。それが問題だ。

コントロール パネル > ネットワーク接続 > ネットワーク カードを右クリック > プロパティ > インターネット プロトコル > プロパティ > 詳細設定 > DNS > この DNS サフィックスを順番に追加します。ここで、ローカル ドメイン: mydomain.com を追加し、次にリモート ドメイン: otherdomain.com を追加します。終了するまで [OK] をクリックします。

「ping server-b」を実行すると、次のように応答するはずです。

server-b.otherdomain.com [192.168.1.2] に 32 バイトのデータで ping を実行: 192.168.1.2 からの応答: バイト = 32 時間 = 12 ミリ秒 TTL = 64

ここで、分散トランザクションの実行を再試行します。

于 2010-12-16T21:34:46.497 に答える
-2

openquery を使ってみましたか?

insert into table select * from openquery(myservername, 'exec mydatabase.dbo.mystoredproc param1, param2, param3')
于 2010-05-28T20:26:44.087 に答える