Delen via


SESSION_CONTEXT (Transact-SQL)

van toepassing op: SQL Server 2016 (13.x) en hoger Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft Fabric

Retourneert de waarde van de opgegeven sleutel in de huidige sessiecontext. De waarde wordt ingesteld met behulp van de sp_set_session_context procedure.

Transact-SQL syntaxis-conventies

Syntaxis

SESSION_CONTEXT(N'key')

Argumenten

'sleutel'

De sleutel van de waarde die wordt opgehaald. sleutel is sysname.

Retourtypen

sql_variant

Retourwaarde

De waarde die is gekoppeld aan de opgegeven sleutel in de sessiecontext of NULL als er geen waarde is ingesteld voor die sleutel.

Machtigingen

Elke gebruiker kan de sessiecontext voor de sessie lezen.

Opmerkingen

Het MARS-gedrag voor SESSION_CONTEXT' is vergelijkbaar met die van CONTEXT_INFO. Als een MARS-batch een sleutel-waardepaar instelt, wordt de nieuwe waarde niet geretourneerd in andere MARS-batches op dezelfde verbinding, tenzij deze zijn gestart na de batch die de nieuwe waarde heeft ingesteld. Als meerdere MARS-batches actief zijn op een verbinding, kunnen waarden niet worden ingesteld als read_only. Dit voorkomt racevoorwaarden en niet-determinisme over welke waarde wint.

Voorbeelden

In het volgende eenvoudige voorbeeld wordt de sessiecontextwaarde voor sleutel user_id 4 ingesteld en wordt vervolgens de SESSION_CONTEXT functie gebruikt om de waarde op te halen.

EXECUTE sp_set_session_context 'user_id', 4;

SELECT SESSION_CONTEXT(N'user_id');

Bekende problemen

Probleem Datum ontdekt Toestand Datum opgelost
Er kan een AV-uitzondering (Access Violation) optreden met de SESSION_CONTEXT functie onder bepaalde voorwaarden. Er kunnen AV-uitzonderingen of verkeerde resultaten optreden wanneer de SESSION_CONTEXT functie wordt uitgevoerd binnen een parallel uitvoeringsplan wanneer de sessie opnieuw wordt ingesteld voor hergebruik.

Een oplossing, die is geïntroduceerd in SQL Server 2019 (15.x) CU 14 om een probleem met onjuiste resultaten in SESSION_CONTEXT parallelle plannen op te lossen, is later vastgesteld dat AV-uitzonderingen onder bepaalde voorwaarden worden veroorzaakt.

U kunt dit probleem oplossen door traceringsvlag 11042 in te schakelen als opstart-, globale of sessietraceringsvlag. Deze traceringsvlag dwingt SESSION_CONTEXT om serieel uit te voeren, waardoor deze niet kan deelnemen aan parallelle queryplannen.

Van toepassing op: SQL Server 2019 (15.x) CU 14 en hoger.
Januari 2022 Heeft een tijdelijke oplossing