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


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

См. также

Справочник

sp_bindsession (Transact-SQL)

Системные хранимые процедуры (Transact-SQL)

srv_getbindtoken (API-интерфейс расширенных хранимых процедур)