sp_bindsession (Transact-SQL)

適用対象: SQL サーバー

SQL Server データベース エンジンの同じインスタンス内の他のセッションにセッションをバインドまたはバインド解除します。 バインド セッションを使用すると、2 つ以上のセッションが同じトランザクションに参加し、 ROLLBACK TRANSACTION または COMMIT TRANSACTION が発行されるまでロックを共有できます。

重要

この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに、複数のアクティブな結果セット (MARS) または分散トランザクションを使用してください。 詳細については、「 SQL Server Native Client での複数のアクティブな結果セット (MARS) の使用を参照してください。

Transact-SQL 構文表記規則

構文

sp_bindsession { 'bind_token' | NULL }

引数

'bind_token'

sp_getbindtokenまたは Open Data Services srv_getbindtoken関数を使用して最初に取得されたトランザクションを識別するトークン。 bind_tokenvarchar(255)です。

リターン コードの値

0 (成功) または 1 (失敗)。

解説

バインドされている 2 つのセッションは、トランザクションとロックのみを共有します。 各セッションは独自の分離レベルを保持し、1 つのセッションで新しい分離レベルを設定しても、もう一方のセッションの分離レベルには影響しません。 各セッションは、そのセキュリティ アカウントによって識別され、アカウントにアクセス許可が付与されているデータベース リソースにのみアクセスできます。

sp_bindsession では、バインド トークンを使用して、2 つ以上の既存のクライアント セッションをバインドします。 これらのクライアント セッションは、バインディング トークンが取得されたデータベース エンジンの同じインスタンス上に存在する必要があります。 セッションは、コマンドを実行するクライアントです。 バインドされたデータベース セッションは、トランザクションとロック領域を共有します。

データベース エンジンの 1 つのインスタンスから取得したバインド トークンは、DTC トランザクションの場合でも、別のインスタンスに接続されているクライアント セッションには使用できません。 バインド トークンは各インスタンス内でのみローカルに有効であり、複数のインスタンス間で共有することはできません。 データベース エンジンの別のインスタンスでクライアント セッションをバインドするには、sp_getbindtokenを実行して別のバインド トークンを取得する必要があります。

sp_bindsession は、アクティブでないトークンを使用するとエラーで失敗します。

bind_tokenを指定せずにsp_bindsessionを使用するか、bind_tokenNULLを渡すことによって、セッションからバインドを解除します。

アクセス許可

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

次の例では、指定したバインド トークンを現在のセッションにバインドします。

Note

この例に示すバインド トークンは、sp_bindsessionを実行する前にsp_getbindtokenを実行することによって取得されました。

USE master;
GO
EXEC sp_bindsession 'BP9---5---->KB?-V'<>1E:H-7U-]ANZ';
GO