Compartilhar via


sp_getbindtoken (Transact-SQL)

Aplica-se: SQL Server

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

Importante

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

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

@out_token [ = ] 'out_token'

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

Valores do código de retorno

Nenhum.

Conjunto de resultados

Nenhum.

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 varchar(255);

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

Veja a seguir 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 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 associação pode ser usado para sp_bindsession associar 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 associaçã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 associação, o será sp_bindsession executado corretamente.

Observação

É recomendável que você use a API do aplicativo Open Data Services srv_getbindtoken para obter um token de associação a ser usado de um procedimento armazenado estendido.

Permissões

Requer associação à função pública .

Exemplos

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

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

Veja a seguir o conjunto de resultados.

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