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