I SQL Server kan du bruge sp_set_session_context
gemt procedure til at indstille nøgle/værdi-par i sessionskonteksten.
Disse nøgle/værdi-par forbliver derefter i din sessionskontekst, indtil din forbindelse til SQL Server lukkes. Du kan bruge disse værdier i lagrede procedurer og anden T-SQL-kode i hele din sessions levetid.
Denne metode til vedligeholdelse af sessionstilstand blev først introduceret i SQL Server 2016. Før den udgivelse skulle du bruge SET CONTEXT_INFO
, som giver en lignende, men meget mere begrænset måde at gemme sessionstilstand på.
Eksempel 1 – Indstil værdien
Her er et eksempel til at demonstrere, hvordan du bruger sp_set_session_context
for at indstille et nøgle/værdi-par.
EXEC sp_set_session_context @key = N'user_id', @value = 15;
Du kan også bruge følgende syntaks:
EXEC sp_set_session_context 'user_id', 15;
Der er også et valgfrit skrivebeskyttet flag, som du kan indstille. Se nedenfor for et eksempel.
Eksempel 2 – Læs værdien
Du kan bruge SESSION_CONTEXT()
funktion til at læse værdien af en nøgle.
Sådan læser du den værdi, jeg indstillede i det forrige eksempel.
SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Resultat:
+-----------+ | user_id | |-----------| | 15 | +-----------+
Eksempel 3 – Opdater værdien
Du kan opdatere værdien, så længe du ikke har angivet den som skrivebeskyttet.
EXEC sp_set_session_context 'user_id', 73; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Resultat:
+-----------+ | user_id | |-----------| | 73 | +-----------+
Eksempel 4 – Indstil til skrivebeskyttet
Som nævnt er der også et valgfrit skrivebeskyttet flag, som du kan indstille. En værdi på 1
indstiller den til skrivebeskyttet og en værdi på 0
(standard) er ikke skrivebeskyttet.
Hvis du indstiller den til skrivebeskyttet, vil du ikke være i stand til at opdatere værdien uden at afbryde forbindelsen og genoprette forbindelsen til SQL Server.
Her er et eksempel på indstilling af skrivebeskyttet flag.
EXEC sp_set_session_context @key = N'user_id', @value = 15, @read_only = 1; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Resultat:
+-----------+ | user_id | |-----------| | 15 | +-----------+
Lad os nu prøve at ændre værdien:
EXEC sp_set_session_context 'user_id', 73;
Resultat:
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.