sql >> Database >  >> RDS >> Sqlserver

Stel sleutel/waarde-paren in in de sessiecontext in SQL Server (sp_set_session_context)

In SQL Server kunt u de sp_set_session_context opgeslagen procedure om sleutel/waarde-paren in de sessiecontext in te stellen.

Deze sleutel/waarde-paren blijven vervolgens in uw sessiecontext totdat uw verbinding met SQL Server wordt gesloten. U kunt deze waarden gebruiken in opgeslagen procedures en andere T-SQL-code gedurende de hele duur van uw sessie.

Deze methode voor het onderhouden van de sessiestatus werd voor het eerst geïntroduceerd in SQL Server 2016. Vóór die release zou u SET CONTEXT_INFO moeten gebruiken. , die een vergelijkbare, maar veel beperktere manier biedt om de sessiestatus op te slaan.

Voorbeeld 1 – Stel de waarde in

Hier is een voorbeeld om te demonstreren hoe sp_set_session_context te gebruiken om een ​​sleutel/waarde-paar in te stellen.

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

U kunt ook de volgende syntaxis gebruiken:

EXEC sp_set_session_context 'user_id', 15;

Er is ook een optionele alleen-lezen vlag die u kunt instellen. Zie hieronder voor een voorbeeld.

Voorbeeld 2 – Lees de waarde

U kunt de SESSION_CONTEXT() . gebruiken functie om de waarde van een sleutel te lezen.

Hier leest u hoe u de waarde kunt lezen die ik in het vorige voorbeeld heb ingesteld.

SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Resultaat:

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

Voorbeeld 3 – Werk de waarde bij

U kunt de waarde bijwerken, zolang u deze niet als alleen-lezen hebt opgegeven.

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

Resultaat:

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

Voorbeeld 4 – Instellen op alleen-lezen

Zoals vermeld, is er ook een optionele alleen-lezen vlag die u kunt instellen. Een waarde van 1 zet het op alleen-lezen, en een waarde van 0 (de standaardinstelling) is niet alleen-lezen.

Als u dit instelt op alleen-lezen, kunt u de waarde niet bijwerken zonder de verbinding met SQL Server te verbreken en opnieuw te verbinden.

Hier is een voorbeeld van het instellen van de alleen-lezen-vlag.

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

Resultaat:

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

Laten we nu proberen de waarde te veranderen:

EXEC sp_set_session_context 'user_id', 73;

Resultaat:

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. Hoe GREATEST() werkt in MariaDB

  2. Verbinding maken met MySQL vanaf de opdrachtregel

  3. java.security.AccessControlException:toegang geweigerd (java.security.SecurityPermission authProvider.SunMSCAPI)

  4. Een Excel-spreadsheet maken vanuit een Oracle-database