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