Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Ustaw pary klucz/wartość w kontekście sesji w programie SQL Server (sp_set_session_context)

W SQL Server możesz użyć sp_set_session_context procedura składowana do ustawiania par klucz/wartość w kontekście sesji.

Te pary klucz/wartość pozostają następnie w kontekście sesji do momentu zamknięcia połączenia z programem SQL Server. Możesz używać tych wartości w procedurach składowanych i innym kodzie T-SQL przez cały czas trwania sesji.

Ta metoda utrzymywania stanu sesji została po raz pierwszy wprowadzona w SQL Server 2016. Przed tą wersją należało użyć SET CONTEXT_INFO , który zapewnia podobny, ale znacznie bardziej ograniczony sposób przechowywania stanu sesji.

Przykład 1 – Ustaw wartość

Oto przykład pokazujący, jak używać sp_set_session_context aby ustawić parę klucz/wartość.

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

Możesz również użyć następującej składni:

EXEC sp_set_session_context 'user_id', 15;

Istnieje również opcjonalna flaga tylko do odczytu, którą możesz ustawić. Zobacz poniżej przykład.

Przykład 2 – Odczytaj wartość

Możesz użyć SESSION_CONTEXT() funkcja odczytu wartości klucza.

Oto jak odczytać wartość, którą ustawiłem w poprzednim przykładzie.

SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Wynik:

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

Przykład 3 – Zaktualizuj wartość

Możesz zaktualizować wartość, o ile nie określiłeś jej jako tylko do odczytu.

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

Wynik:

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

Przykład 4 – Ustaw jako tylko do odczytu

Jak wspomniano, istnieje również opcjonalna flaga tylko do odczytu, którą można ustawić. Wartość 1 ustawia go na tylko do odczytu, a wartość 0 (domyślnie) nie jest tylko do odczytu.

Jeśli ustawisz ją na tylko do odczytu, nie będziesz w stanie zaktualizować wartości bez rozłączenia i ponownego połączenia z SQL Server.

Oto przykład ustawienia flagi tylko do odczytu.

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

Wynik:

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

Teraz spróbujmy zmienić wartość:

EXEC sp_set_session_context 'user_id', 73;

Wynik:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przyznaj uprawnienia na poziomie tabeli w SQL Server

  2. Jak zrobić zapytanie z group_concat na serwerze sql

  3. Jak przekazać parametry wartości tabeli do procedury składowanej z kodu .net?

  4. Tutorial z SQL (DDL, DML) na przykładzie dialektu MS SQL Server

  5. SQL Server - brak NATURAL JOIN / x JOIN y USING(pole)