Dela via


sp_getbindtoken (Transact-SQL)

gäller för:SQL Server

Returnerar en unik identifierare för transaktionen. Den här unika identifieraren är en sträng som används för att binda sessioner med hjälp av sp_bindsession.

Viktig

Den här funktionen tas bort i en framtida version av SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen. Använd flera aktiva resultatuppsättningar (MARS) eller distribuerade transaktioner i stället. Mer information finns i Using Multiple Active Result Sets (MARS) in SQL Server Native Client.

Transact-SQL syntaxkonventioner

Syntax

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

Argument

Viktig

Argument för utökade lagrade procedurer måste anges i den specifika ordning som beskrivs i avsnittet Syntax. Om parametrarna anges i fel ordning visas ett felmeddelande.

[ @out_token = ] "out_token"

Den token som ska användas för att binda sessioner. @out_token är varchar(255), utan standard.

Returnera kodvärden

Ingen.

Resultatuppsättning

Ingen.

Anmärkningar

sp_getbindtoken returnerar endast en giltig token när den lagrade proceduren körs i en aktiv transaktion. Annars returnerar databasmotorn ett felmeddelande. Till exempel:

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

Här är resultatuppsättningen.

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.

När sp_getbindtoken används för att registrera en distribuerad transaktionsanslutning i en öppen transaktion returnerar SQL Server samma token. Till exempel:

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;

Båda SELECT-uttryck returnerar samma token:

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

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

Bindningstoken kan användas med sp_bindsession för att binda nya sessioner till samma transaktion. Bindningstoken är endast giltig lokalt i varje instans av databasmotorn och kan inte delas mellan flera instanser.

Om du vill hämta och skicka en bindningstoken måste du köra sp_getbindtoken innan du kör sp_bindsession för att dela samma låsutrymme. Om du hämtar en bindningstoken körs sp_bindsession korrekt.

Not

Vi rekommenderar att du använder srv_getbindtoken Open Data Services-programprogramprogramgränssnittet (API) för att hämta en bindningstoken som ska användas från en utökad lagrad procedur.

Behörigheter

Kräver medlemskap i den offentliga rollen.

Exempel

I följande exempel hämtas en bindningstoken och namnet på bindningstoken visas.

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

Här är resultatuppsättningen.

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