0

ローカルの mssql 2005 サーバーからリモートの mssql 2005 サーバーへのトリガーにデータを挿入したいと考えています。

テーブル Syr があります。何かが追加されたかどうかを検出するトリガー (AFTER INSERT) を作成します。そのデータを別のリモート サーバーの同じテーブルにコピーしたいと思います。私の問題は、通常のクエリでinsertステートメント(非常に単純で、テストのためだけに静的データを使用する)を実行するだけで成功することです。リモートサーバーから選択することもできます。しかし、この単純な挿入をトリガーブロックに入れると、「分散トランザクションを開始できません」

CREATE TRIGGER T_SyrInserted
ON [DBProba].[dbo].[Syr]
AFTER INSERT
AS BEGIN

INSERT INTO [RemoteSrv].[DBProba].[dbo].[Syr] (SyrId, SyrNm ) VALUES (15000734, 'valami')
END

解決済み:

  • DTC 認証を [なし] に設定します
  • 「XACT_ABORT がオフであるため、ネストされたトランザクションを実行できません」というエラーが発生したため、insert ステートメントの前に次の行を追加しました: SET XACT_ABORT ON; 単純な挿入で何を「ネスト」したかはわかりませんが、問題ありません...
4

1 に答える 1

0

あなたの場合、updateステートメントはローカルトランザクションを開き、insertステートメントもリモートサーバーとのトランザクションを開きます。これは分散トランザクションの場合です。

これを機能させるには、DTC http://support.microsoft.com/kb/817064を開始する必要があります。

分散トランザクションの詳細については、リンクhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms681205%28v=vs.85%29.aspxを確認してください。

于 2013-07-03T11:42:37.200 に答える