次の方法で共有


sp_getbindtoken (Transact-SQL)

適用対象: SQL Server

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

重要

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

Transact-SQL 構文表記規則

構文

sp_getbindtoken [ @out_token = ] 'out_token' OUTPUT
[ ; ]

引数

[ @out_token = ] 'out_token'

セッションのバインドに使用するトークン。 @out_tokenvarchar(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 TRANSACTION;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token1;
BEGIN DISTRIBUTED TRANSACTION;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token2;
--COMMIT TRANSACTION;
--COMMIT TRANSACTION;

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

Token1
------
PKb'gN5<9aGEedk_16>8U=5---/5G=--

Token2
------
PKb'gN5<9aGEedk_16>8U=5---/5G=--

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

バインド トークンを取得して渡すには、同じロック領域を共有するためのsp_bindsessionを実行する前に、sp_getbindtokenを実行する必要があります。 バインド トークンを取得すると、 sp_bindsession が正しく実行されます。

Note

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

アクセス許可

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

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

DECLARE @bind_token VARCHAR(255);
BEGIN TRANSACTION;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token;
--COMMIT TRANSACTION;

結果セットは次のとおりです。

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