Condividi tramite


sp_getbindtoken (Transact-SQL)

Si applica a: SQL Server

Restituisce un identificatore univoco per la transazione, Questo identificatore univoco è una stringa usata per associare le sessioni tramite sp_bindsession.

Importante

Questa funzionalità verrà rimossa nelle versioni future di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Usare invece più set di risultati attivi (MARS) o transazioni distribuite. Per altre informazioni, vedere Uso di più set di risultati attivi (MARS) in SQL Server Native Client.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

[ @out_token = ] 'out_token'

Token da usare per associare sessioni. @out_token è varchar(255), senza impostazione predefinita.

Valori del codice restituito

Nessuno.

Set di risultati

Nessuno.

Osservazioni:

sp_getbindtoken restituisce un token valido solo quando la stored procedure viene eseguita all'interno di una transazione attiva. In caso contrario, il motore di database restituisce un messaggio di 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;

Questo è il set di risultati.

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 viene usato per integrare una connessione di transazione distribuita all'interno di una transazione aperta, SQL Server restituisce lo stesso token. Ad esempio:

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;

Entrambe le istruzioni SELECT restituiscono lo stesso token:

Token1
------
PKb'gN5<9aGEedk_16>8U=5---/5G=--

Token2
------
PKb'gN5<9aGEedk_16>8U=5---/5G=--

Il token di associazione può essere usato con sp_bindsession per associare nuove sessioni alla stessa transazione. Il token di associazione è valido solo in locale all'interno di ogni istanza del 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 condividere lo stesso spazio di blocco. Se si ottiene un token di associazione, sp_bindsession viene eseguito 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 TRANSACTION;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token;
--COMMIT TRANSACTION;

Questo è il set di risultati.

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