Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения: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 AS 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 AS 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 AS VARCHAR (255);
BEGIN TRANSACTION;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token;
--COMMIT TRANSACTION;
Вот результирующий набор.
Token
-----
\0]---5^PJK51bP<1F<-7U-]ANZ