Partager via


SESSION_CONTEXT (Transact-SQL)

S’applique à : SQL Server 2016 (13.x) et versions ultérieures d’Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics SQL Analyticsdans Microsoft FabricWarehouse dans microsoft FabricSQL Database dans Microsoft Fabric SQL Database dans Microsoft Fabric

Renvoie la valeur de la clé spécifiée dans le contexte de la session en cours. La valeur est définie à l’aide de la procédure sp_set_session_context .

Conventions de la syntaxe Transact-SQL

Syntaxe

SESSION_CONTEXT(N'key')

Les arguments

'key'

Clé de la valeur récupérée. la clé est sysname.

Types de retour

sql_variant

Valeur retournée

Valeur associée à la clé spécifiée dans le contexte de session ou NULL si aucune valeur n’est définie pour cette clé.

Autorisations

Tout utilisateur peut lire le contexte de session pour sa session.

Remarques

Le comportement MARS pour SESSION_CONTEXT' est similaire à celui de CONTEXT_INFO. Si un lot MARS définit une paire clé-valeur, la nouvelle valeur n’est pas retournée dans d’autres lots MARS sur la même connexion, sauf s’ils ont démarré une fois le lot terminé. Si plusieurs lots MARS sont actifs sur une connexion, les valeurs ne peuvent pas être définies en tant que read_only. Cela empêche les conditions de course et le nondéterminisme quant à quelle valeur gagne.

Exemples

L’exemple simple suivant définit la valeur du contexte de session pour la clé user_id sur 4, puis utilise la SESSION_CONTEXT fonction pour récupérer la valeur.

EXECUTE sp_set_session_context 'user_id', 4;

SELECT SESSION_CONTEXT(N'user_id');

Problèmes connus

Problème Date de la détection Statut Date de la résolution
Une exception av (Access Violation) peut se produire avec la SESSION_CONTEXT fonction dans certaines conditions. Vous pouvez rencontrer des exceptions AV ou des résultats incorrects lorsque la SESSION_CONTEXT fonction s’exécute dans un plan d’exécution parallèle lorsque la session est réinitialisée à des fins de réutilisation.

Un correctif, qui a été introduit dans SQL Server 2019 (15.x) CU 14 pour résoudre un problème de résultats incorrect avec SESSION_CONTEXT des plans parallèles, a été trouvé ultérieurement pour provoquer des exceptions AV dans certaines conditions.

Pour atténuer ce problème, vous pouvez activer l’indicateur de trace 11042 en tant qu’indicateur de démarrage, global ou de trace de session. Cet indicateur de trace force SESSION_CONTEXT à s’exécuter en série, ce qui l’empêche de participer à des plans de requête parallèles.

S’applique à : SQL Server 2019 (15.x) CU 14 et versions ultérieures.
Janvier 2022 A une solution de contournement