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.