Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Définir des paires clé/valeur dans le contexte de session dans SQL Server (sp_set_session_context)

Dans SQL Server, vous pouvez utiliser le sp_set_session_context procédure stockée pour définir des paires clé/valeur dans le contexte de la session.

Ces paires clé/valeur restent ensuite dans votre contexte de session jusqu'à la fermeture de votre connexion à SQL Server. Vous pouvez utiliser ces valeurs dans des procédures stockées et d'autres codes T-SQL tout au long de la durée de votre session.

Cette méthode de gestion de l'état de la session a été introduite pour la première fois dans SQL Server 2016. Avant cette version, vous deviez utiliser SET CONTEXT_INFO , qui fournit un moyen similaire, mais beaucoup plus limité, de stocker l'état de la session.

Exemple 1 - Définir la valeur

Voici un exemple pour montrer comment utiliser sp_set_session_context pour définir une paire clé/valeur.

EXEC sp_set_session_context
  @key = N'user_id',
  @value = 15;

Vous pouvez également utiliser la syntaxe suivante :

EXEC sp_set_session_context 'user_id', 15;

Il existe également un indicateur optionnel en lecture seule que vous pouvez définir. Voir ci-dessous pour un exemple.

Exemple 2 - Lire la valeur

Vous pouvez utiliser le SESSION_CONTEXT() fonction pour lire la valeur d'une clé.

Voici comment lire la valeur que j'ai définie dans l'exemple précédent.

SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Résultat :

+-----------+
| user_id   |
|-----------|
| 15        |
+-----------+

Exemple 3 - Mettre à jour la valeur

Vous pouvez mettre à jour la valeur, tant que vous ne l'avez pas spécifiée en lecture seule.

EXEC sp_set_session_context 'user_id', 73;
SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Résultat :

+-----------+
| user_id   |
|-----------|
| 73        |
+-----------+

Exemple 4 - Définir en lecture seule

Comme mentionné, il existe également un indicateur optionnel en lecture seule que vous pouvez définir. Une valeur de 1 le définit en lecture seule et une valeur de 0 (valeur par défaut) n'est pas en lecture seule.

Si vous le définissez en lecture seule, vous ne pourrez pas mettre à jour la valeur sans vous déconnecter et vous reconnecter à SQL Server.

Voici un exemple de définition de l'indicateur de lecture seule.

EXEC sp_set_session_context 
  @key = N'user_id', 
  @value = 15, 
  @read_only = 1;
SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Résultat :

+-----------+
| user_id   |
|-----------|
| 15        |
+-----------+

Maintenant, essayons de changer la valeur :

EXEC sp_set_session_context 'user_id', 73;

Résultat :

Msg 15664, Level 16, State 1, Line 1
Cannot set key 'user_id' in the session context. The key has been set as read_only for this session.