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_bindsession 之前运行 sp_getbindtoken,以共享同一锁空间。 如果获得绑定令牌,则 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

另请参阅

sp_bindsession (Transact-SQL)
系统存储过程 (Transact-SQL)
srv_getbindtoken(扩展存储过程 API)