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


sp_bindsession (Transact-SQL)

Область применения: SQL Server

Привязывает или отменяет привязку сеанса к другим сеансам в том же экземпляре SQL Server ядро СУБД. Сеансы привязки позволяют двум или нескольким сеансам участвовать в одной транзакции и делиться блокировками до тех пор, пока не будет выдано ROLLBACK TRANSACTION или COMMIT TRANSACTION не будет выдано.

Внимание

Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Вместо этого используйте несколько активных наборов результатов (MARS) или распределенных транзакций. Дополнительные сведения см. в статье Об использовании нескольких активных результирующих наборов (MARS) в собственном клиенте SQL Server.

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_bindsession { 'bind_token' | NULL }

Аргументы

"bind_token"

Маркер, идентифицирующий транзакцию, изначально полученную с помощью sp_getbindtoken или функцией Open Data Services srv_getbindtoken . bind_token — varchar(255).

Значения кода возврата

0 (успешно) или 1 (сбой).

Замечания

Два объединенных сеанса совместно используют только транзакции и блокировки. Каждый сеанс сохраняет свой собственный уровень изоляции, и настройка нового уровня изоляции на одном сеансе не влияет на уровень изоляции другого сеанса. Каждый сеанс по-прежнему определяется своей учетной записью безопасности и может получить доступ только к ресурсам базы данных, к которым предоставляется разрешение учетной записи.

sp_bindsession использует маркер привязки для привязки двух или более существующих клиентских сеансов. Эти клиентские сеансы должны находиться в том же экземпляре ядро СУБД, из которого получен маркер привязки. Сеанс — это клиент, выполняющий команду. Привязанные сеансы баз данных совместно используют пространство транзакций и блокировок.

Маркер привязки, полученный из одного экземпляра ядро СУБД, нельзя использовать для сеанса клиента, подключенного к другому экземпляру, даже для транзакций DTC. Маркер привязки действителен только локально внутри каждого экземпляра и не может использоваться для нескольких экземпляров. Чтобы привязать клиентские сеансы к другому экземпляру ядро СУБД, необходимо получить другой маркер привязки путем sp_getbindtokenвыполнения.

sp_bindsession не удается выполнить ошибку, если он использует токен, который не активен.

Отмена привязки из сеанса без sp_bindsession указания bind_token или передачи NULL bind_token.

Разрешения

Необходимо быть членом роли public.

Примеры

В следующем примере указанный токен привязки привязывается к текущему сеансу.

Примечание.

Маркер привязки, показанный в примере, был получен путем выполнения sp_getbindtoken перед выполнением sp_bindsession.

USE master;
GO
EXEC sp_bindsession 'BP9---5---->KB?-V'<>1E:H-7U-]ANZ';
GO