Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Imposta coppie chiave/valore nel contesto della sessione in SQL Server (sp_set_session_context)

In SQL Server puoi usare sp_set_session_context stored procedure per impostare coppie chiave/valore nel contesto della sessione.

Queste coppie chiave/valore rimangono quindi nel contesto della sessione fino alla chiusura della connessione a SQL Server. È possibile utilizzare questi valori nelle procedure memorizzate e in altro codice T-SQL per tutta la durata della sessione.

Questo metodo per mantenere lo stato della sessione è stato introdotto per la prima volta in SQL Server 2016. Prima di tale versione, era necessario utilizzare SET CONTEXT_INFO , che fornisce un modo simile, ma molto più limitato, di memorizzare lo stato della sessione.

Esempio 1:impostare il valore

Ecco un esempio per dimostrare come utilizzare sp_set_session_context per impostare una coppia chiave/valore.

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

Potresti anche usare la seguente sintassi:

EXEC sp_set_session_context 'user_id', 15;

C'è anche un flag di sola lettura opzionale che puoi impostare. Vedi sotto per un esempio.

Esempio 2 – Leggi il valore

Puoi usare il SESSION_CONTEXT() funzione per leggere il valore di una chiave.

Ecco come leggere il valore che ho impostato nell'esempio precedente.

SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Risultato:

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

Esempio 3 – Aggiorna il valore

Puoi aggiornare il valore, a condizione che non sia stato specificato come di sola lettura.

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

Risultato:

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

Esempio 4 – Imposta su Sola lettura

Come accennato, c'è anche un flag di sola lettura opzionale che puoi impostare. Un valore di 1 lo imposta su sola lettura e un valore di 0 (l'impostazione predefinita) non è di sola lettura.

Se lo imposti su sola lettura, non sarai in grado di aggiornare il valore senza disconnetterti e riconnetterti a SQL Server.

Ecco un esempio di impostazione del flag di sola lettura.

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

Risultato:

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

Ora, proviamo a cambiare il valore:

EXEC sp_set_session_context 'user_id', 73;

Risultato:

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.