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


SESSION_CONTEXT (Transact-SQL)

Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL Azure Управляемый экземпляр SQL Azureконечную точку аналитики SQL Azure Synapse Analytics в хранилище Microsoft Fabricв Microsoft Fabric

Возвращает значение указанного ключа в контексте текущего сеанса. Значение задается с помощью процедуры sp_set_session_context .

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

Синтаксис

SESSION_CONTEXT(N'key')

Аргументы

"ключ"

Ключ извлекаемого значения. ключsysname.

Типы возвращаемых данных

sql_variant

Возвращаемое значение

Значение, связанное с указанным ключом в контексте сеанса, или NULL если для этого ключа не задано значение.

Разрешения

Любой пользователь может считывать контекст своего сеанса.

Замечания

Поведение MARS для SESSION_CONTEXT', похожее на поведение CONTEXT_INFO. Если пакет MARS задает пару "ключ-значение", новое значение не возвращается в других пакетах MARS в том же соединении, если только они не запущены после выполнения пакета, задающего новое значение. Если несколько пакетов MARS активны в соединении, значения не могут быть заданы как read_only. Это предотвращает условия гонки и недетерминированность о том, какое значение выигрывает.

Примеры

Следующий простой пример задает значение контекста сеанса для ключа user_id 4, а затем использует SESSION_CONTEXT функцию для получения значения.

EXECUTE sp_set_session_context 'user_id', 4;

SELECT SESSION_CONTEXT(N'user_id');

Известные проблемы

Проблема Дата обнаружения Состояние Дата решения
Исключение "Нарушение доступа" (AV) может возникать с SESSION_CONTEXT функцией в определенных условиях. Вы можете столкнуться с исключениями AV или неправильными результатами, когда SESSION_CONTEXT функция выполняется в параллельном плане выполнения при сбросе сеанса для повторного использования.

Исправление, которое было введено в SQL Server 2019 (15.x) с накопительным пакетом обновления 14 (CU 14) для решения проблемы с неправильными результатами в SESSION_CONTEXT параллельных планах, позже было обнаружено, что это приведет к возникновению исключений AV в определенных условиях.

Чтобы устранить эту проблему, можно включить флаг трассировки 11042 в качестве флага трассировки запуска, глобального или сеанса. Этот флаг трассировки принудительно SESSION_CONTEXT выполняется последовательно, предотвращая его участие в параллельных планах запросов.

Применимо к: SQL Server 2019 (15.x) CU 14 и более поздних версий.
Январь 2022 года Существует обходной путь