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.