Udostępnij za pomocą


SESSION_CONTEXT (Transact-SQL)

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje usługi Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics— punkt końcowy analizy SQL w usłudze Microsoft FabricWarehouse wbazie danych Microsoft Fabric SQL Database w usłudze Microsoft Fabric

Zwraca wartość określonego klucza w bieżącym kontekście sesji. Wartość jest ustawiana przy użyciu procedury sp_set_session_context .

Transact-SQL konwencje składni

Składnia

SESSION_CONTEXT(N'key')

Argumenty (w programowaniu)

"klucz"

Klucz pobieranej wartości. klucz to sysname.

Typy zwracane

sql_variant

Wartość zwracana

Wartość skojarzona z określonym kluczem w kontekście sesji lub NULL jeśli żadna wartość nie jest ustawiona dla tego klucza.

Uprawnienia

Każdy użytkownik może odczytać kontekst sesji dla swojej sesji.

Uwagi

Zachowanie mars dla SESSION_CONTEXTparametru " jest podobne do zachowania CONTEXT_INFO. Jeśli partia MARS ustawia parę klucz-wartość, nowa wartość nie jest zwracana w innych partiach MARS w tym samym połączeniu, chyba że zostały uruchomione po partii, która ustawiła nową wartość ukończoną. Jeśli wiele partii MARS jest aktywnych w połączeniu, wartości nie można ustawić jako read_only. Zapobiega to warunkom wyścigu i nieokreślonościom o tym, która wartość wygrywa.

Przykłady

Poniższy prosty przykład ustawia wartość kontekstu sesji dla klucza user_id na 4, a następnie używa SESSION_CONTEXT funkcji do pobrania wartości.

EXECUTE sp_set_session_context 'user_id', 4;

SELECT SESSION_CONTEXT(N'user_id');

Znane problemy

Problematyka Data odnalezienia Stan Data rozwiązania
Wyjątek naruszenia dostępu (AV) może wystąpić z funkcją SESSION_CONTEXT w określonych warunkach. Mogą wystąpić wyjątki av lub nieprawidłowe wyniki, gdy SESSION_CONTEXT funkcja działa w ramach równoległego planu wykonywania, gdy sesja zostanie zresetowana do ponownego użycia.

Poprawka, która została wprowadzona w programie SQL Server 2019 (15.x) CU 14 w celu rozwiązania problemu z nieprawidłowymi wynikami w SESSION_CONTEXT ramach planów równoległych, została później znaleziona w celu spowodowania wyjątków av w określonych warunkach.

Aby rozwiązać ten problem, możesz włączyć flagę śledzenia 11042 jako flagę uruchamiania, globalnego lub śledzenia sesji. Ta flaga śledzenia wymusza SESSION_CONTEXT wykonanie serializacji, uniemożliwiając jej uczestnictwo w równoległych planach zapytań.

Dotyczy: SQL Server 2019 (15.x) CU 14 i nowsze wersje.
Styczeń 2022 Ma obejście