sp_bindsession (Transact-SQL)

Привязывает или развязывает сеанс к другим сеансам в одном экземпляре компонента SQL Server Database Engine. Привязывание сеансов позволяет двум и более сеансам участвовать в одной транзакции и общих блокировках, пока выполняется ROLLBACK TRANSACTION или COMMIT TRANSACTION.

Дополнительные сведения о связанных сеансах см. в разделе Использование связанных сеансов.

Важное примечаниеВажно!

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

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

sp_bindsession { 'bind_token' | NULL }

Аргументы

  • 'bind_token'
    Маркер, идентифицирующий транзакцию, первоначально полученную с помощью sp_getbindtoken или функции srv_getbindtoken открытых служб данных. Аргумент bind_token имеет тип varchar(255).

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

0 (успешное завершение) или 1 (ошибка)

Замечания

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

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

Маркер связывания, полученный от одного экземпляра компонента Database Engine, не может использоваться для сеанса клиента, подключенного к другому экземпляру, даже для транзакций DTC. Маркер связывания допустим только локально внутри каждого экземпляра и не может совместно использоваться множеством экземпляров. Для привязки сеансов клиента на другом экземпляре компонента Database Engine необходимо получить другой маркер связывания, выполнив процедуру 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