次の方法で共有


sp_bindsession (Transact-SQL)

任意のセッションを、SQL Server データベース エンジンの同じインスタンス内にある別のセッションに対して、バインドまたはバインド解除します。セッションをバインドすると、複数のセッションを同じトランザクションに含むことができ、ROLLBACK TRANSACTION または COMMIT TRANSACTION が実行されるまでロックを共有できます。

バインドされたセッションの詳細については、「バインドされたセッションの使用」を参照してください。

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

トピック リンク アイコンTransact-SQL 構文表記規則

構文

sp_bindsession { 'bind_token' | NULL }

引数

  • 'bind_token'
    sp_getbindtoken または Open Data Service 関数 srv_getbindtoken によって最初に取得されたトランザクションを示すトークンを指定します。bind_token のデータ型は varchar(255) です。

解説

バインドされた 2 つのセッションが共有するのはトランザクションとロックだけです。各セッションはそれぞれの分離レベルを保持し、一方のセッションで新しい分離レベルを設定しても、もう一方のセッションの分離レベルには影響しません。各セッションは引き続きセキュリティ アカウントによって識別されます。またこれらのセッションは、そのアカウントに権限が与えられているデータベース リソースにしかアクセスできません。

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

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

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

セッションからのバインドの解除は、bind_token を指定せずに sp_bindsession を使用するか、bind_token に NULL を渡すことにより実行できます。

権限

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

戻り値

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

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

ms174403.note(ja-jp,SQL.90).gifメモ :
この例に示されているバインド トークンは、sp_bindsession を実行する前に sp_getbindtoken を実行して取得したものです。
USE master;
GO
EXEC sp_bindsession 'BP9---5---->KB?-V'<>1E:H-7U-]ANZ';
GO

参照

関連項目

sp_getbindtoken (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)

その他の技術情報

バインドされたセッションの使用
srv_getbindtoken (拡張ストアド プロシージャ API)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手