Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Задайте двойки ключ/стойност в контекста на сесията в SQL Server (sp_set_session_context)

В 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. 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изпълнява ли се EXCEPT по-бързо от JOIN, когато колоните на таблицата са еднакви

  2. Свържете SQL Server към HubSpot CRM

  3. Как да избера последните 5 реда в таблица без сортиране?

  4. Отместване на реда в SQL Server

  5. Как да получите ефективно управление на блокиране на Sql Server в C# с ADO?