В SQL Server можете да използвате sp_set_session_context
съхранена процедура за задаване на двойки ключ/стойност в контекста на сесията.
След това тези двойки ключ/стойност остават в контекста на вашата сесия, докато връзката ви със SQL Server се затвори. Можете да използвате тези стойности в съхранени процедури и друг T-SQL код през целия живот на вашата сесия.
Този метод за поддържане на състоянието на сесията беше въведен за първи път в SQL Server 2016. Преди това издание ще трябва да използвате SET CONTEXT_INFO
, който предоставя подобен, но много по-ограничен начин за съхранение на състоянието на сесията.
Пример 1 – Задайте стойност
Ето пример, за да демонстрирате как да използвате sp_set_session_context
за да зададете двойка ключ/стойност.
EXEC sp_set_session_context @key = N'user_id', @value = 15;
Можете също да използвате следния синтаксис:
EXEC sp_set_session_context 'user_id', 15;
Има и незадължителен флаг само за четене, който можете да зададете. Вижте по-долу за пример.
Пример 2 – Прочетете стойността
Можете да използвате SESSION_CONTEXT()
функция за четене на стойността на ключ.
Ето как да прочетете стойността, която зададох в предишния пример.
SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Резултат:
+-----------+ | user_id | |-----------| | 15 | +-----------+
Пример 3 – Актуализиране на стойността
Можете да актуализирате стойността, стига да не сте я посочили като само за четене.
EXEC sp_set_session_context 'user_id', 73; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Резултат:
+-----------+ | user_id | |-----------| | 73 | +-----------+
Пример 4 – Настройте само за четене
Както споменахме, има и незадължителен флаг само за четене, който можете да зададете. Стойност на 1
задава го само за четене и стойност 0
(по подразбиране) не е само за четене.
Ако го зададете само за четене, няма да можете да актуализирате стойността, без да прекъснете връзката и да се свържете отново със SQL Server.
Ето пример за настройка на флага само за четене.
EXEC sp_set_session_context @key = N'user_id', @value = 15, @read_only = 1; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Резултат:
+-----------+ | user_id | |-----------| | 15 | +-----------+
Сега нека се опитаме да променим стойността:
EXEC sp_set_session_context 'user_id', 73;
Резултат:
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.