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_token为 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 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_getbindtoken 该令牌,然后才能执行 sp_bindsession 以共享同一锁空间。 如果获取绑定令牌, sp_bindsession 请正确运行。

注意

建议使用 srv_getbindtoken 开放式数据服务应用程序编程接口 (API) 来从扩展存储过程获得要使用的绑定令牌。

权限

要求 公共 角色具有成员身份。

示例

下面的示例将获取一个绑定令牌并显示该绑定令牌的名称。

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