SET REMOTE_PROC_TRANSACTIONS (Transact-SQL)

適用対象:SQL Server

ローカル トランザクションがアクティブ状態のときにリモート ストアド プロシージャを実行した場合、Microsoft 分散トランザクション コーディネーター (MS DTC) によって管理される Transact-SQL 分散トランザクションを開始するように指定します。

重要

この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 このオプションは、リモート ストアド プロシージャを使用する、旧バージョンのアプリケーションとの互換性のために用意されています。 リモート ストアド プロシージャを呼び出す代わりに、リンク サーバーを参照した分散クエリを使用してください。 これらは、sp_addlinkedserver を使って定義されます。

Transact-SQL 構文表記規則

構文

  
SET REMOTE_PROC_TRANSACTIONS { ON | OFF }   

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

ON | OFF
ON の場合、ローカル トランザクションからリモート ストアド プロシージャが実行されると、Transact-SQL 分散トランザクションが開始されます。 OFF の場合、ローカル トランザクションからリモート ストアド プロシージャを呼び出しても、Transact-SQL 分散トランザクションは開始しません。

解説

REMOTE_PROC_TRANSACTIONS が ON の場合、リモート ストアド プロシージャを呼び出すと分散トランザクションが開始され、トランザクションは MS DTC に参加します。 リモート ストアド プロシージャを呼び出す SQL Server のインスタンスは、トランザクションを実行したインスタンスであり、このインスタンスによってトランザクションの完了が制御されます。 この接続に対して引き続き COMMIT TRANSACTION または ROLLBACK TRANSACTION ステートメントを実行すると、制御側のインスタンスは MS DTC 対して、コンピューター間の分散トランザクションの完了を管理することを要求します。

T-SQL 分散トランザクションが開始された後は、リモート サーバーとして定義されている SQL Server の他のインスタンスに対し、リモート ストアド プロシージャを呼び出すことができます。 リモート サーバーはすべて Transact-SQL 分散トランザクションに参加することになります。MS DTC では、各リモート サーバーでトランザクションが完了したかどうかが確認されます。

REMOTE_PROC_TRANSACTIONS は接続レベルの設定であり、インスタンス レベルの sp_configure remote proc trans オプションをオーバーライドします。

REMOTE_PROC_TRANSACTIONS が OFF の場合、ローカル トランザクションの一部としてリモート ストアド プロシージャは呼び出されません。 リモート ストアド プロシージャによる変更は、ストアド プロシージャの完了時にコミットまたはロールバックされます。 リモート ストアド プロシージャを呼び出した接続によって実行される後続の COMMIT TRANSACTION または ROLLBACK TRANSACTION ステートメントは、ストアド プロシージャによる処理に影響を与えません。

REMOTE_PROC_TRANSACTIONS オプションは互換性のためのオプションであり、sp_addserver を使用してリモート サーバーとして定義された SQL Server のインスタンスに対してリモート ストアド プロシージャを呼び出す場合にのみ、影響を及ぼします。 このオプションは、インスタンス上でストアド プロシージャを実行する分散クエリには適用されません。このインスタンスは、sp_addlinkedserver でリンク サーバーとして定義されたインスタンスです。

SET REMOTE_PROC_TRANSACTIONS は、解析時ではなく実行時に設定されます。

アクセス許可

ロール public のメンバーシップが必要です。

参照

BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)
SET ステートメント (Transact-SQL)