sp_bindsession (Transact-SQL)
Привязывает или развязывает сеанс к другим сеансам в одном экземпляре компонента SQL Server Database Engine. Привязывание сеансов позволяет двум и более сеансам участвовать в одной транзакции и общих блокировках, пока выполняется ROLLBACK TRANSACTION или COMMIT TRANSACTION.
Дополнительные сведения о связанных сеансах см. в разделе Использование связанных сеансов.
![]() |
---|
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Используйте режим MARS или распределенные транзакции. Дополнительные сведения см. в разделах Использование режима MARS или Распределенные транзакции (компонент Database Engine). |
Синтаксис
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