次の方法で共有


sp_getbindtoken (Transact-SQL)

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

重要な注意事項重要

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

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

構文

sp_getbindtoken [@out_token =] 'return_value' OUTPUT 

引数

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

戻り値

なし

結果セット

なし

説明

SQL Server 2000 以降では、アクティブなトランザクションの内部でストアド プロシージャが実行される場合のみ、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.
注意注意

SQL Server 7.0 では、アクティブなトランザクションの外部でストアド プロシージャが実行される場合でも、sp_getbindtoken は有効なトークンを返します。先の例は SQL Server 7.0 では機能しますが、SQL Server 2000 以降では機能しません。

sp_getbindtoken を使用して、オープン トランザクションの内部で分散トランザクションの接続に参加する場合、SQL Server 2000 以降では同じトークンが返されます。以下に例を示します。

USE AdventureWorks;
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 を正常に実行できます。

注意注意

拡張ストアド プロシージャからバインド トークンを取得するときは、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