sp_getbindtoken (Transact-SQL)
Retourne un identificateur unique pour la transaction. Il s'agit en fait d'une chaîne utilisée pour lier des sessions à l'aide de sp_bindsession.
Important
Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft 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 MARS (Multiple Active Results Sets) ou les transactions distribuées. Pour plus d'informations, consultez Utilisation de MARS (Multiple Active Result Sets) ou Transactions distribuées (moteur de base de données).
Syntaxe
sp_getbindtoken [@out_token =] 'return_value' OUTPUT
Arguments
- [@out_token = ]'return_value'
Jeton à utiliser pour lier les sessions. L'argument return_value est de type varchar(255) et n'a pas de valeur par défaut.
Valeurs du code de retour
Aucun
Jeux de résultats
Aucun
Notes
Dans SQL Server 2000 et les versions ultérieures, sp_getbindtoken retourne un jeton valide uniquement lorsque la procédure stockée est exécutée dans 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;
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.
Notes
Dans SQL Server 7,0, sp_getbindtoken retourne un jeton valide même si la procédure stockée est exécutée en dehors d'une transaction active. L'exemple précédent fonctionne dans SQL Server 7.0, mais pas dans SQL Server 2000 ou les versions ultérieures.
Lorsque sp_getbindtoken est utilisée pour inscrire une connexion de transaction distribuée dans une transaction ouverte, SQL Server 2000 ou une version ultérieure retourne le même jeton. Par exemple :
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;
Les deux instructions SELECT retournent le même jeton :
Token
-----
PKb'gN5<9aGEedk_16>8U=5---/5G=--
(1 row(s_) affected)
Token
-----
PKb'gN5<9aGEedk_16>8U=5---/5G=--
(1 row(s_) affected)
Le jeton de liaison peut être utilisé avec sp_bindsession afin de lier de nouvelles sessions à la même transaction. Le jeton de liaison n'est valide que localement dans chaque instance du moteur de base de données et ne peut pas être partagé par plusieurs instances.
Pour obtenir et passer un jeton de liaison, vous devez exécuter sp_getbindtoken avant d'utiliser sp_bindsession afin de partager le même espace de verrouillage. Si vous disposez d'un jeton de liaison, sp_bindsession sera exécuté correctement.
Notes
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 TRAN;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token;
Voici l'ensemble des résultats.
Token
----------------------------------------------------------
\0]---5^PJK51bP<1F<-7U-]ANZ