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),无默认值。

返回代码值

None

结果集

None

注释

在 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_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