sp_getbindtoken (Transact-SQL)
Restituisce un identificatore univoco per la transazione, ovvero una stringa utilizzata per associare le sessioni tramite sp_bindsession.
Importante |
---|
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). |
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