Freigeben über


SESSION_CONTEXT (Transact-SQL)

Gilt für: SQL Server 2016 (13.x) und höhere Versionen von Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics SQL Analytics-Endpunktin Microsoft FabricWarehouse in Microsoft FabricSQL-Datenbank in Microsoft Fabric SQL-Datenbank in Microsoft Fabric

Gibt den Wert des angegebenen Schlüssels im aktuellen Sitzungskontext zurück. Der Wert wird mithilfe der sp_set_session_context-Prozedur festgelegt.

Transact-SQL-Syntaxkonventionen

Syntax

SESSION_CONTEXT(N'key')

Argumente

"Key"

Der Schlüssel des abzurufenden Werts. Der Schlüssel ist Sysname.

Rückgabetypen

sql_variant

Rückgabewert

Der wert, der dem angegebenen Schlüssel im Sitzungskontext zugeordnet ist oder NULL wenn kein Wert für diesen Schlüssel festgelegt ist.

Berechtigungen

Jeder Benutzer kann den Sitzungskontext für seine Sitzung lesen.

Bemerkungen

Das MARS-Verhalten für SESSION_CONTEXT' ähnelt dem von CONTEXT_INFO. Wenn ein MARS-Batch ein Schlüssel-Wert-Paar festlegt, wird der neue Wert nicht in anderen MARS-Batches in derselben Verbindung zurückgegeben, es sei denn, sie beginnen nach dem Batch, der den neuen Wert festgelegt hat. Wenn mehrere MARS-Batches für eine Verbindung aktiv sind, können Werte nicht als read_onlyfestgelegt werden. Dies verhindert Rennbedingungen und Unbestimmtheit darüber, welcher Wert gewinnt.

Beispiele

Im folgenden einfachen Beispiel wird der Sitzungskontextwert für den Schlüssel user_id auf 4 festgelegt und anschließend die SESSION_CONTEXT Funktion zum Abrufen des Werts verwendet.

EXECUTE sp_set_session_context 'user_id', 4;

SELECT SESSION_CONTEXT(N'user_id');

Bekannte Probleme

Thema Entdeckungsdatum Der Status Gelöst am
Eine Zugriffsverletzungsverletzung (AV) kann unter bestimmten Bedingungen mit der SESSION_CONTEXT Funktion auftreten. Möglicherweise treten AV-Ausnahmen oder falsche Ergebnisse auf, wenn die SESSION_CONTEXT Funktion innerhalb eines parallelen Ausführungsplans ausgeführt wird, wenn die Sitzung zur Wiederverwendung zurückgesetzt wird.

Ein Fix, der in SQL Server 2019 (15.x) CU 14 eingeführt wurde, um ein falsches Ergebnisproblem mit SESSION_CONTEXT parallelen Plänen zu beheben, wurde später gefunden, um AV-Ausnahmen unter bestimmten Bedingungen zu verursachen.

Um dieses Problem zu beheben, können Sie die Ablaufverfolgungskennzeichnung 11042 als Start-, global- oder Sitzungsablaufverfolgungskennzeichnung aktivieren. Diese Ablaufverfolgungskennzeichnung erzwingt SESSION_CONTEXT die serielle Ausführung, hindert sie daran, an parallelen Abfrageplänen teilzunehmen.

Gilt für: SQL Server 2019 (15.x) CU 14 und höhere Versionen.
Januar 2022 Problemumgehung bekannt