Partilhar via


sp_getbindtoken (Transact-SQL)

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

Observação importanteImportante

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Use MARS (vários conjuntos de resultados ativos) ou, então, transações distribuídas. Para obter mais informações, consulte Usando MARS (vários conjuntos de resultados ativos) ou Transações distribuídas (Mecanismo de Banco de Dados).

Ícone de vínculo de tópicoConvenções de sintaxe 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 de código de retorno

Nenhum

Conjuntos de resultados

Nenhum

Comentários

No SQL Server 2000 e em versões posteriores, 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.
ObservaçãoObservação

No SQL Server 7.0, sp_getbindtoken retornará um token válido mesmo que o procedimento armazenado seja executado fora de uma transação ativa. O exemplo anterior funciona no SQL Server 7.0, mas não no SQL Server 2000 ou versões posteriores.

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

USE AdventureWorks2008R2;
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 é válido apenas localmente, dentro de cada instância do Mecanismo de Banco de Dados¸ e não é compartilhado por 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çãoObservaçã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 na 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;

Aqui está o conjunto de resultados.

Token

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

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