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

Indstil nøgle/værdipar i sessionskonteksten i SQL Server (sp_set_session_context)

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. 

  1. Hvordan kan jeg initialisere en MySQL-database med skema i en Docker-container?

  2. SQL vælg alle, hvis parameteren er null, ellers returnerer den specifikke vare

  3. Bindende parametre for WHERE IN klausul med PDO

  4. Sammensat primær nøgle versus yderligere id-kolonne?