sp_getbindtoken (Transact-SQL)

Restituisce un identificatore univoco per la transazione, ovvero una stringa utilizzata per associare le sessioni tramite sp_bindsession.

Nota importanteImportante

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Utilizzare MARS (Multiple Active Results Sets) o transazioni distribuite. Per ulteriori informazioni, vedere Utilizzo di MARS (Multiple Active Result Set) o Transazioni distribuite (Motore di database).

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_getbindtoken [@out_token =] 'return_value' OUTPUT 

Argomenti

  • [@out_token =]'return_value'
    Token da utilizzare per associare le sessioni. return_value è di tipo varchar(255) e non prevede alcun valore predefinito.

Valori restituiti

Nessuno

Set di risultati

Nessuno

Osservazioni

In SQL Server 2000 e versioni successive la stored procedure sp_getbindtoken restituisce un token valido solo quando viene eseguita all'interno di una transazione attiva. In caso contrario, Motore di database restituisce un errore. Ad esempio:

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

[!NOTA]

In SQL Server 7.0 la stored procedure sp_getbindtoken restituisce un token valido anche se viene eseguita all'esterno di una transazione attiva. L'esempio precedente è valido per SQL Server 7.0, ma non per SQL Server 2000 o versioni successive.

Quando si esegue sp_getbindtoken per integrare una connessione di transazione distribuita all'interno di una transazione aperta, in SQL Server 2000 viene restituito lo stesso token. Ad esempio:

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

Entrambe le istruzioni SELECT restituiscono lo stesso 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)

È possibile utilizzare il token di associazione con sp_bindsession per associare nuove sessioni alla stessa transazione. Il token di associazione è valido solo a livello locale in ogni istanza di Motore di database e non può essere condiviso tra più istanze.

Per ottenere e passare un token di associazione, è necessario eseguire sp_getbindtoken prima di eseguire sp_bindsession per la condivisione dello stesso spazio di blocco. Se si ottiene un token di associazione, la stored procedure sp_bindsession viene eseguita correttamente.

[!NOTA]

È consigliabile utilizzare l'API ODS srv_getbindtoken per ottenere un token di associazione da utilizzare in una stored procedure estesa.

Autorizzazioni

È richiesta l'appartenenza al ruolo public.

Esempi

Nell'esempio seguente viene recuperato un token di associazione, di cui viene quindi visualizzato il nome.

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

Set di risultati:

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