Поделиться через


sp_getbindtoken (Transact-SQL)

Область применения: SQL Server

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

Внимание

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

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

Синтаксис

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

Аргументы

[ @out_token = ] 'out_token'

Маркер, используемый для привязки сеансов. @out_token — 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 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;

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

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

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

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

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

Примечание.

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

Разрешения

Необходимо быть членом роли public.

Примеры

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

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

Вот результирующий набор.

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