sp_bindsession (Transact-SQL)

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

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

ms174403.note(ru-ru,SQL.90).gifВажно!
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Используйте режим MARS или распределенные транзакции. Дополнительные сведения см. в разделах Using Multiple Active Result Sets (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.

Примеры

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

ms174403.note(ru-ru,SQL.90).gifПримечание.
Маркер привязки, показанный в этом примере, был получен путем выполнения процедуры sp_getbindtoken до выполнения процедуры sp_bindsession.
USE master;
GO
EXEC sp_bindsession 'BP9---5---->KB?-V'<>1E:H-7U-]ANZ';
GO

См. также

Справочник

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

Другие ресурсы

Использование связанных сеансов
srv_getbindtoken (Extended Stored Procedure API)

Справка и поддержка

Получение помощи по SQL Server 2005