sp_getbindtoken (Transact-SQL)

適用対象:SQL Server

トランザクションの一意識別子を返します。 この一意識別子は、sp_bindsession を使用してセッションをバインドするために使用する文字列です。

重要

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

Transact-SQL 構文表記規則

構文

  
sp_getbindtoken [@out_token =] 'return_value' OUTPUT   

引数

[@out_token= ]'return_value'
セッションのバインドに使用するトークンです。 return_valueは varchar(255) で、既定値はありません。

リターン コードの値

なし

結果セット

なし

解説

sp_getbindtokenは、アクティブなトランザクション内でストアド プロシージャが実行された場合にのみ、有効なトークンを返します。 それ以外の場合、データベース エンジンはエラー メッセージを返します。 次に例を示します。

-- Declare a variable to hold the bind token.  
-- No active transaction.  
DECLARE @bind_token varchar(255);  
-- Trying to get the bind token returns an error 3921.  
EXECUTE sp_getbindtoken @bind_token OUTPUT;  
Server: Msg 3921, Level 16, State 1, Procedure sp_getbindtoken, Line 4  
Cannot get a transaction token if there is no transaction active.  
Reissue the statement after a transaction has been started.  

sp_getbindtokenを使用して、開いているトランザクション内に分散トランザクション接続を参加させると、SQL Server は同じトークンを返します。 次に例を示します。

USE AdventureWorks2022;  
GO  
DECLARE @bind_token varchar(255);  
  
BEGIN TRAN;  
  
EXECUTE sp_getbindtoken @bind_token OUTPUT;  
SELECT @bind_token AS Token;  
  
BEGIN DISTRIBUTED TRAN;  
  
EXECUTE sp_getbindtoken @bind_token OUTPUT;  
SELECT @bind_token AS Token;  

どちらのステートメントも SELECT 同じトークンを返します。

Token  
-----  
PKb'gN5<9aGEedk_16>8U=5---/5G=--  
(1 row(s_) affected)  
  
Token  
-----  
PKb'gN5<9aGEedk_16>8U=5---/5G=--  
(1 row(s_) affected)  

バインド トークンをsp_bindsessionと共に使用して、新しいセッションを同じトランザクションにバインドできます。 バインド トークンは、データベース エンジンの各インスタンス内でのみローカルに有効であり、複数のインスタンス間で共有することはできません。

バインド トークンを取得して渡すには、sp_getbindtoken を実行してから sp_bindsession を実行して、同じロック領域を共有します。 バインド トークンの取得後は、sp_bindsession を正常に実行できます。

Note

拡張ストアド プロシージャからバインド トークンを取得するときは、srv_getbindtoken オープン データ サービス API を使用することをお勧めします。

アクセス許可

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

次の例では、バインド トークンを取得し、バインド トークン名を表示します。

DECLARE @bind_token varchar(255);  
BEGIN TRAN;  
EXECUTE sp_getbindtoken @bind_token OUTPUT;  
SELECT @bind_token AS Token;  

結果セットは次のようになります。

Token

----------------------------------------------------------

\0]---5^PJK51bP<1F<-7U-]ANZ

参照

sp_bindsession (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)
srv_getbindtoken (拡張ストアド プロシージャ API)