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-интерфейс расширенных хранимых процедур)
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по