Compartir a través de


sp_getbindtoken (Transact-SQL)

Se aplica a: SQL Server

Devuelve un identificador único para la transacción. Este identificador único es una cadena que se usa para enlazar sesiones mediante sp_bindsession.

Importante

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Use varios conjuntos de resultados activos (MARS) o transacciones distribuidas en su lugar. Para obtener más información, vea Usar varios conjuntos de resultados activos (MARS) en SQL Server Native Client.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_getbindtoken [ @out_token = ] 'out_token' OUTPUT
[ ; ]

Argumentos

[ @out_token = ] 'out_token'

Token que se va a usar para enlazar sesiones. @out_token es varchar(255), sin ningún valor predeterminado.

Valores de código de retorno

Ninguno.

Conjunto de resultados

Ninguno.

Comentarios

sp_getbindtoken devuelve un token válido solo cuando el procedimiento almacenado se ejecuta dentro de una transacción activa. De lo contrario, el Motor de base de datos devuelve un mensaje de error. Por ejemplo:

-- 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;

El conjunto de resultados es el siguiente:

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.

Cuando sp_getbindtoken se usa para inscribir una conexión de transacción distribuida dentro de una transacción abierta, SQL Server devuelve el mismo token. Por ejemplo:

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;

Las dos instrucciones SELECT devuelven el mismo símbolo (token):

Token1
------
PKb'gN5<9aGEedk_16>8U=5---/5G=--

Token2
------
PKb'gN5<9aGEedk_16>8U=5---/5G=--

El token de enlace se puede usar con sp_bindsession para enlazar nuevas sesiones a la misma transacción. El token de enlace solo es válido localmente dentro de cada instancia del Motor de base de datos y no se puede compartir entre varias instancias.

Para obtener y pasar un token de enlace, debe ejecutarse sp_getbindtoken antes de ejecutarse sp_bindsession para compartir el mismo espacio de bloqueo. Si obtiene un token de enlace, sp_bindsession se ejecuta correctamente.

Nota:

Se recomienda utilizar la interfaz de programación de aplicaciones (API) de Servicios abiertos de datos srv_getbindtoken para obtener un símbolo (token) de enlace que se pueda utilizar desde un procedimiento almacenado extendido.

Permisos

Debe pertenecer al rol public .

Ejemplos

En el ejemplo siguiente se obtiene un símbolo (token) de enlace y se muestra su nombre.

DECLARE @bind_token VARCHAR(255);
BEGIN TRANSACTION;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token;
--COMMIT TRANSACTION;

El conjunto de resultados es el siguiente:

Token
-----
\0]---5^PJK51bP<1F<-7U-]ANZ