sp_bindsession (Transact-SQL)
任意のセッションを、SQL Server データベース エンジンの同じインスタンス内にある別のセッションに対して、バインドまたはバインド解除します。セッションをバインドすると、複数のセッションを同じトランザクションに含むことができ、ROLLBACK TRANSACTION または COMMIT TRANSACTION が実行されるまでロックを共有できます。
バインドされたセッションの詳細については、「バインドされたセッションの使用」を参照してください。
重要 |
---|
この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。代わりに、複数のアクティブな結果セット (MARS) または分散トランザクションを使用してください。詳細については、「複数のアクティブな結果セット (MARS) の使用」または「分散トランザクション (データベース エンジン)」を参照してください。 |
構文
sp_bindsession { 'bind_token' | NULL }
引数
- 'bind_token'
sp_getbindtoken または Open Data Service 関数 srv_getbindtoken によって最初に取得されたトランザクションを示すトークンを指定します。bind_token のデータ型は varchar(255) です。
戻り値
0 (成功) または 1 (失敗)
説明
バインドされた 2 つのセッションが共有するのはトランザクションとロックだけです。各セッションはそれぞれの分離レベルを保持し、一方のセッションで新しい分離レベルを設定しても、もう一方のセッションの分離レベルには影響しません。各セッションは引き続きセキュリティ アカウントによって識別されます。またこれらのセッションは、そのアカウントに権限が与えられているデータベース リソースにしかアクセスできません。
sp_bindsession では、バインド トークンを使用して、複数の既存のクライアント セッションをバインドします。これらのクライアント セッションは、バインド トークンを取得したデータベース エンジンのインスタンス上に存在する必要があります。セッションとは、クライアントが実行しているコマンドのことです。バインドされたデータベース セッションは、トランザクションとロック領域を共有します。
データベース エンジンの 1 つのインスタンスから取得したバインド トークンは、DTC トランザクションの場合でも、別のインスタンスに接続するクライアント セッションには使用できません。バインド トークンは、各インスタンス内でローカルに有効なだけで、複数のインスタンスにわたって共有することはできません。データベース エンジンの別のインスタンスにあるクライアント セッションをバインドするには、sp_getbindtoken を実行して別のバインド トークンを取得する必要があります。
sp_bindsession では、アクティブでないトークンを使用するとエラーが発生して失敗します。
セッションからのバインドの解除は、bind_token を指定せずに sp_bindsession を使用するか、bind_token に NULL を渡すことにより実行できます。
権限
public ロールのメンバシップが必要です。
例
次の例では、指定したバインド トークンを現在のセッションにバインドします。
注 |
---|
この例に示されているバインド トークンは、sp_bindsession を実行する前に sp_getbindtoken を実行して取得したものです。 |
USE master;
GO
EXEC sp_bindsession 'BP9---5---->KB?-V'<>1E:H-7U-]ANZ';
GO