sp_getbindtoken (Transact-SQL)

Применимо к:SQL Server

Возвращает уникальный идентификатор для транзакции. Этот уникальный идентификатор является строкой, используемой для привязки сеансов при помощи процедуры sp_bindsession.

Внимание

Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Вместо этого используйте несколько активных наборов результатов (MARS) или распределенных транзакций. Дополнительные сведения см. в разделе Использование множественных активных результирующих наборов (MARS).

Соглашения о синтаксисе Transact-SQL

Синтаксис

  
sp_getbindtoken [@out_token =] 'return_value' OUTPUT   

Аргументы

[@out_token= ]'return_value'
Токен, используемый для связывания сеансов. return_value — varchar(255) без значения по умолчанию.

Значения кода возврата

нет

Результирующие наборы

нет

Замечания

sp_getbindtoken возвращает допустимый маркер, только если хранимая процедура выполняется внутри активной транзакции. В противном случае ядро СУБД вернет сообщение об ошибке. Например:

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

Если sp_getbindtoken используется для включения подключения распределенной транзакции внутри открытой транзакции, SQL Server возвращает тот же токен. Например:

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

Обе инструкции SELECT возвращают один и тот же токен:

Token  
-----  
PKb'gN5<9aGEedk_16>8U=5---/5G=--  
(1 row(s_) affected)  
  
Token  
-----  
PKb'gN5<9aGEedk_16>8U=5---/5G=--  
(1 row(s_) affected)  

Токен привязки может быть использован с процедурой sp_bindsession для привязки новых сеансов к одной и той же транзакции. Маркер привязки действителен только локально внутри каждого экземпляра ядро СУБД и не может использоваться для нескольких экземпляров.

Для получения и передачи токена привязки необходимо выполнить процедуру sp_getbindtoken перед выполнением процедуры sp_bindsession для использования общего пространства блокировок. Если получен токен привязки, процедура sp_bindsession выполняется правильно.

Примечание.

Для получения токена привязки для использования из расширенной хранимой процедуры рекомендуется использовать интерфейс прикладного программирования (API) Open Data Services процедуры srv_getbindtoken.

Разрешения

Требуется членство в роли public.

Примеры

В следующем примере показано получение токена привязки и отображается имя токена привязки.

DECLARE @bind_token varchar(255);  
BEGIN TRAN;  
EXECUTE sp_getbindtoken @bind_token OUTPUT;  
SELECT @bind_token AS Token;  

Результирующий набор:

Token

----------------------------------------------------------

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

См. также

sp_bindsession (Transact-SQL)
Системные хранимые процедуры (Transact-SQL)
srv_getbindtoken (API-интерфейс расширенных хранимых процедур)