sql >> Databasteknik >  >> RDS >> Sqlserver

Ställ in nyckel-/värdepar i sessionskontexten i SQL Server (sp_set_session_context)

I SQL Server kan du använda sp_set_session_context lagrad procedur för att ställa in nyckel/värdepar i sessionssammanhang.

Dessa nyckel/värdepar förblir sedan i ditt sessionssammanhang tills din anslutning till SQL Server stängs. Du kan använda dessa värden i lagrade procedurer och annan T-SQL-kod under hela sessionen.

Den här metoden för att upprätthålla sessionstillstånd introducerades först i SQL Server 2016. Före den versionen skulle du behöva använda SET CONTEXT_INFO , vilket ger ett liknande, men mycket mer begränsat sätt att lagra sessionstillstånd.

Exempel 1 – Ställ in värdet

Här är ett exempel för att visa hur du använder sp_set_session_context för att ställa in ett nyckel-/värdepar.

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

Du kan också använda följande syntax:

EXEC sp_set_session_context 'user_id', 15;

Det finns också en valfri skrivskyddad flagga som du kan ställa in. Se nedan för ett exempel.

Exempel 2 – Läs värdet

Du kan använda SESSION_CONTEXT() funktion för att läsa värdet på en nyckel.

Så här läser du värdet jag angav i föregående exempel.

SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Resultat:

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

Exempel 3 – Uppdatera värdet

Du kan uppdatera värdet så länge du inte har angett det som skrivskyddat.

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

Resultat:

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

Exempel 4 – Ställ in på skrivskyddad

Som nämnts finns det också en valfri skrivskyddad flagga som du kan ställa in. Ett värde på 1 ställer in den på skrivskyddad och värdet 0 (standard) är inte skrivskyddad.

Om du ställer in den på skrivskyddad kommer du inte att kunna uppdatera värdet utan att koppla från och återansluta till SQL Server.

Här är ett exempel på hur du ställer in skrivskyddad flagga.

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        |
+-----------+

Nu ska vi försöka ändra värdet:

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. Migrera PostgreSQL till molnet - Jämföra lösningar från Amazon, Google och Microsoft

  2. Infoga i en MySQL-tabell eller uppdatera om det finns

  3. bestämma teckenuppsättningen för en tabell/databas?

  4. Om Neo4j