Partilhar via


sp_getbindtoken (Transact-SQL)

Aplica-se a:SQL Server

Retorna um identificador exclusivo para a transação. Esse identificador exclusivo é uma cadeia de caracteres usada para vincular sessões usando sp_bindsession.

Importante

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. Em vez disso, use vários conjuntos de resultados ativos (MARS) ou transações distribuídas. Para obter mais informações, consulte Usando vários conjuntos de resultados ativos (MARS) no SQL Server Native Client.

Transact-SQL convenções de sintaxe

Sintaxe

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

Argumentos

Importante

Os argumentos para procedimentos armazenados estendidos devem ser inseridos na ordem específica, conforme descrito na seção de sintaxe. Se os parâmetros forem inseridos fora de ordem, ocorrerá uma mensagem de erro.

[ @out_token = ] 'out_token'

O token a ser usado para vincular sessões. @out_token é varchar(255), sem padrão.

Valores de código de retorno

Nenhuma.

Conjunto de resultados

Nenhuma.

Comentários

sp_getbindtoken retorna um token válido somente quando o procedimento armazenado é executado dentro de uma transação ativa. Caso contrário, o Mecanismo de Banco de Dados retornará uma mensagem de erro. Por exemplo:

-- Declare a variable to hold the bind token.
-- No active transaction.
DECLARE @bind_token AS VARCHAR (255);

-- Trying to get the bind token returns an error 3921.
EXECUTE sp_getbindtoken @bind_token OUTPUT;

Aqui está o conjunto de resultados.

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.

Quando sp_getbindtoken é usado para inscrever uma conexão de transação distribuída dentro de uma transação aberta, o SQL Server retorna o mesmo token. Por exemplo:

USE AdventureWorks2022;
GO

DECLARE @bind_token AS 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;

Ambas as instruções SELECT retornam o mesmo token:

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

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

O token de ligação pode ser usado com sp_bindsession para vincular novas sessões à mesma transação. O token de associação só é válido localmente dentro de cada instância do Mecanismo de Banco de Dados e não pode ser compartilhado entre várias instâncias.

Para obter e passar um token de ligação, você deve executar sp_getbindtoken antes de executar sp_bindsession para compartilhar o mesmo espaço de bloqueio. Se você obtiver um token de ligação, sp_bindsession será executado corretamente.

Observação

Recomendamos que você use a interface de programação de aplicativo (API) do srv_getbindtoken Open Data Services para obter um token de ligação a ser usado de um procedimento armazenado estendido.

Permissões

Requer a participação na função pública.

Exemplos

O exemplo a seguir obtém um token de ligação e exibe o nome do token de ligação.

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

Aqui está o conjunto de resultados.

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