Partager via


sp_getbindtoken (Transact-SQL)

S’applique à : SQL Server

Retourne un identificateur unique pour la transaction. Cet identificateur unique est une chaîne utilisée pour lier des sessions à l’aide sp_bindsessionde .

Important

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt plusieurs jeux de résultats actifs (MARS) ou des transactions distribuées. Pour plus d’informations, consultez Utilisation de plusieurs jeux de résultats actifs (MARS) dans SQL Server Native Client.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

[ @out_token = ] 'out_token'

Jeton à utiliser pour lier des sessions. @out_token est varchar(255), sans valeur par défaut.

Valeurs des codes de retour

Aucune.

Jeu de résultats

Aucune.

Notes

sp_getbindtoken retourne un jeton valide uniquement lorsque la procédure stockée est exécutée à l’intérieur d’une transaction active. Sinon, le Moteur de base de données retourne un message d’erreur. Par exemple :

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

Voici le jeu de résultats obtenu.

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.

Lorsqu’il sp_getbindtoken est utilisé pour inscrire une connexion de transaction distribuée à l’intérieur d’une transaction ouverte, SQL Server retourne le même jeton. Par exemple :

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;

Les deux instructions SELECT retournent le même jeton :

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

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

Le jeton de liaison peut être utilisé pour sp_bindsession lier de nouvelles sessions à la même transaction. Le jeton de liaison est valide uniquement localement à l’intérieur de chaque instance du Moteur de base de données et ne peut pas être partagé entre plusieurs instances.

Pour obtenir et passer un jeton de liaison, vous devez exécuter sp_getbindtoken avant d’exécuter sp_bindsession pour partager le même espace de verrouillage. Si vous obtenez un jeton de liaison, sp_bindsession s’exécute correctement.

Remarque

Nous vous conseillons d'utiliser l'API Open Data Services srv_getbindtoken pour obtenir un jeton de liaison susceptible d'être utilisé à partir d'une procédure stockée étendue.

autorisations

Nécessite l'appartenance au rôle public .

Exemples

L'exemple suivant demande un jeton de liaison et affiche son nom.

DECLARE @bind_token VARCHAR(255);
BEGIN TRANSACTION;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token;
--COMMIT TRANSACTION;

Voici le jeu de résultats obtenu.

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