sql >> Databáze >  >> RDS >> Sqlserver

Nastavit páry klíč/hodnota v kontextu relace na serveru SQL (sp_set_session_context)

V SQL Server můžete použít sp_set_session_context uložená procedura pro nastavení párů klíč/hodnota v kontextu relace.

Tyto páry klíč/hodnota pak zůstanou v kontextu relace, dokud se neuzavře připojení k serveru SQL. Tyto hodnoty můžete používat v uložených procedurách a dalším kódu T-SQL po celou dobu trvání relace.

Tato metoda pro udržování stavu relace byla poprvé představena v SQL Server 2016. Před tímto vydáním byste museli použít SET CONTEXT_INFO , který poskytuje podobný, ale mnohem omezenější způsob ukládání stavu relace.

Příklad 1 – Nastavení hodnoty

Zde je příklad, který ukazuje, jak používat sp_set_session_context pro nastavení páru klíč/hodnota.

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

Můžete také použít následující syntaxi:

EXEC sp_set_session_context 'user_id', 15;

K dispozici je také volitelný příznak pouze pro čtení, který můžete nastavit. Příklad viz níže.

Příklad 2 – Přečtěte si hodnotu

Můžete použít SESSION_CONTEXT() funkce pro čtení hodnoty klíče.

Zde je návod, jak číst hodnotu, kterou jsem nastavil v předchozím příkladu.

SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Výsledek:

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

Příklad 3 – Aktualizace hodnoty

Hodnotu můžete aktualizovat, pokud jste ji neurčili jako pouze pro čtení.

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

Výsledek:

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

Příklad 4 – Nastavení pouze pro čtení

Jak již bylo zmíněno, existuje také volitelný příznak pouze pro čtení, který můžete nastavit. Hodnota 1 nastaví jej na pouze pro čtení a na hodnotu 0 (výchozí) není jen pro čtení.

Pokud jej nastavíte na pouze pro čtení, nebudete moci aktualizovat hodnotu bez odpojení a opětovného připojení k serveru SQL.

Zde je příklad nastavení příznaku pouze pro čtení.

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

Výsledek:

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

Nyní zkusme změnit hodnotu:

EXEC sp_set_session_context 'user_id', 73;

Výsledek:

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. Rozdělit sloupec do více řádků v Postgresu

  2. Šifrovat heslo v R - pro připojení k Oracle DB pomocí RODBC

  3. Jak převést XMLTYPE ve VARCHAR v ORACLE?

  4. PostgreSQL Incremental Backup a Point-In-Time Recovery