sp_getbindtoken (Transact-SQL)
Возвращает уникальный идентификатор для транзакции. Этот уникальный идентификатор является строкой, используемой для привязки сеансов при помощи процедуры sp_bindsession.
Важно! |
---|
В будущей версии Microsoft SQL Server этот компонент будет удален. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Используйте режим MARS или распределенные транзакции. Дополнительные сведения см. в разделе Использование режима MARS. |
Синтаксические обозначения Transact-SQL
Синтаксис
sp_getbindtoken [@out_token =] 'return_value' OUTPUT
Аргументы
- [@out_token= ]'return_value'
Токен, используемый для связывания сеансов. Аргумент return_value имеет тип varchar(255) и не имеет значения по умолчанию.
Значения кодов возврата
Отсутствует
Результирующие наборы
Отсутствует
Замечания
sp_getbindtoken возвращает допустимый токен только в случае, если хранимая процедура выполняется внутри активной транзакции. В противном случае компонент Компонент Database Engine возвращает сообщение об ошибке. Например:
-- 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 AdventureWorks2012;
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 для привязки новых сеансов к одной и той же транзакции. Токен привязки действителен только локально внутри каждого экземпляра компонента Компонент Database Engine и не может разделяться несколькими экземплярами.
Для получения и передачи токена привязки необходимо выполнить процедуру 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
См. также
Справочник
Системные хранимые процедуры (Transact-SQL)
srv_getbindtoken (API-интерфейс расширенных хранимых процедур)