web-dev-qa-db-ja.com

リンクサーバーのOLE DBプロバイダー "SQLNCLI11"のネストされたトランザクションを開始できません

2つのリンクサーバーがあり、最初のサーバーの1つのテーブルのデータをSELECTsだけ、2番目のサーバーの別のテーブルのデータをINSERTするストアドプロシージャを作成します。

プロシージャコードは次のようになります。

BEGIN TRAN

INSERT INTO [RI].[TEST_DB].[TEST_TABLE] (...)
SELECT ...
FROM [TABLE]

TRUNCATE [TABLE]

COMMIT TRAN

しかし、私は次のエラーを受け取ります:

リンクサーバー "RI"のOLE DBプロバイダー "SQLNCLI11"は、メッセージ "このセッションではこれ以上トランザクションを開始できません。"を返しました。
メッセージ7395、レベル16、状態2、手順usp_test、行46
リンクサーバー「RI」のOLE DBプロバイダー「SQLNCLI11」のネストされたトランザクションを開始できません。
XACT_ABORTオプションがOFFに設定されていたため、ネストされたトランザクションが必要でした。

3
gotqn

エラーメッセージが示すように、次をストアドプロシージャに追加します。

SET XACT_ABORT ON;

分散クエリと分散トランザクションを参照してください

5
Paul White 9