Transact-SQL 参考

sp_getbindtoken

返回事务的唯一标识符。 该唯一标识符被引用为绑定令牌。sp_getbindtoken 返回用于在客户端之间共享事务的字符串表示法。

语法

sp_getbindtoken [@out_token =] 'return_value' OUTPUT [, @for_xp_flag]

参数

[@out_token =] 'return_value'

是用于共享事务的令牌。return_value 的数据类型为 varchar(255),没有默认值。

@for_xp_flag

常量。如果等于 1,则创建一个绑定令牌,该令牌可被传递给扩展存储过程以回调服务器。

返回代码值

结果集

注释

在 Microsoft SQL Server 2000 中,sp_getbindtoken 仅当在活动事务内部执行该存储过程时才返回有效令牌。 否则,SQL Server 将返回一个错误信息。例如:

说明  在 SQL Server 7.0 中,即使在活动事务外部执行该存储过程,sp_getbindtoken 也返回有效令牌。下例工作于 SQL Server 7.0 环境中。

/*open a database*/
USE MYDB
GO
/*declare bind token; no active transaction*/
DECLARE @bind_token varchar(255)
/*return bind token*/
EXECUTE sp_getbindtoken @bind_token OUTPUT
/*get an error message*/
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 2000 返回同一令牌。例如:

USE MYDB
   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
/*returns the same token*/
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 一起使用,将新会话绑定到同一事务上。绑定令牌仅在每个 SQL Server 的本地机上有效且不能在多个 SQL Server 实例中共享。

若要获得并传递绑定令牌,则必须在运行 sp_bindsession 之前运行 sp_getbindtoken,以共享同一锁空间。如果获得绑定令牌,则 sp_bindsession 可正确运行。

说明  建议使用 srv_getbindtoken 开放式数据服务 API 来获得从扩展存储过程处使用的绑定令牌。

权限

执行权限默认授予 public 角色。

示例
A. 获得绑定令牌

下面的示例获得绑定令牌并显示绑定令牌名称。

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
B. 使用 @for_xp_flag 参数

下面的示例指定用于向服务器回叫的常量。

DECLARE @bind_token varchar(255)
BEGIN TRAN
EXECUTE sp_getbindtoken @bind_token OUTPUT, 1
SELECT @bind_token AS Token

如果 @for_xp_flag 没有使用常量,将返回下列错误信息:

Msg 214, Level 16, State 1, Server <server_name>, Procedure <procedure_name>, Line 5
Cannot convert parameter @for_xp_flag to type constant expected by procedure.

请参见

sp_bindsession

系统存储过程

srv_getbindtoken