Udostępnij za pośrednictwem


sp_getbindtoken (Transact-SQL)

Dotyczy:programu SQL Server

Zwraca unikatowy identyfikator transakcji. Ten unikatowy identyfikator jest ciągiem używanym do wiązania sesji przy użyciu sp_bindsession.

Ważny

Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji. Zamiast tego użyj wielu aktywnych zestawów wyników (MARS) lub transakcji rozproszonych. Aby uzyskać więcej informacji, zobacz Using Multiple Active Result Sets (MARS) in SQL Server Native Client.

Transact-SQL konwencje składni

Składnia

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

Argumenty

Ważny

Argumenty dla rozszerzonych procedur składowanych należy wprowadzić w określonej kolejności zgodnie z opisem w sekcji składni. Jeśli parametry są wprowadzane poza kolejnością, wystąpi komunikat o błędzie.

[ @out_token = ] 'out_token'

Token używany do wiązania sesji. @out_token jest varchar(255), bez wartości domyślnej.

Zwracanie wartości kodu

Żaden.

Zestaw wyników

Żaden.

Uwagi

sp_getbindtoken zwraca prawidłowy token tylko wtedy, gdy procedura składowana jest wykonywana wewnątrz aktywnej transakcji. W przeciwnym razie aparat bazy danych zwraca komunikat o błędzie. Na przykład:

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

Oto zestaw wyników.

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.

Gdy sp_getbindtoken jest używana do rejestracji rozproszonego połączenia transakcji wewnątrz otwartej transakcji, program SQL Server zwraca ten sam token. Na przykład:

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;

Obie instrukcje SELECT zwracają ten sam token:

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

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

Token powiązania może być używany z sp_bindsession w celu powiązania nowych sesji z tą samą transakcją. Token powiązania jest prawidłowy tylko lokalnie w każdym wystąpieniu aparatu bazy danych i nie może być współużytkowany w wielu wystąpieniach.

Aby uzyskać i przekazać token powiązania, należy uruchomić sp_getbindtoken przed wykonaniem sp_bindsession w celu udostępnienia tego samego miejsca blokady. Jeśli uzyskasz token powiązania, sp_bindsession działa poprawnie.

Nuta

Zalecamy użycie interfejsu programowania aplikacji (API) usługi srv_getbindtoken Open Data Services w celu uzyskania tokenu powiązania, który ma być używany z rozszerzonej procedury składowanej.

Uprawnienia

Wymaga członkostwa w roli publicznej.

Przykłady

Poniższy przykład uzyskuje token powiązania i wyświetla nazwę powiązanego tokenu.

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

Oto zestaw wyników.

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