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 associar sessões usando sp_bindsession.

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, consulte Usando MARS (vários conjuntos de resultados ativos).

Convenções de sintaxe de Transact-SQL

Sintaxe

  
sp_getbindtoken [@out_token =] 'return_value' OUTPUT   

Argumentos

[@out_token= ]'return_value'
É o token a ser usado para associar sessões. return_value é varchar(255) sem padrão.

Valores do código de retorno

Nenhum

Conjuntos de resultados

Nenhum

Comentários

sp_getbindtoken retornará um token válido somente quando o procedimento armazenado for 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;  
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 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;  

Ambas as instruções SELECT retornam o mesmo 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)  

O token de associação pode ser usado com sp_bindsession para 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 sp_bindsession para compartilhar o mesmo espaço de bloqueio. Se você obtiver um token de associação, sp_bindsession será 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 public.

Exemplos

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

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

Este é o conjunto de resultados.

Token

----------------------------------------------------------

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

Confira também

sp_bindsession (Transact-SQL)
Procedimentos armazenados do sistema (Transact-SQL)
srv_getbindtoken (API de Procedimento Armazenado Estendido)