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

Как SESSION_CONTEXT() работи в SQL Server

В SQL Server можете да използвате SESSION_CONTEXT() функция за четене на стойността на определен ключ в контекста на текущата сесия.

Ключът (двойка ключ/стойност) трябва да се зададе първо. Това може да стане с sp_set_session_context съхранена процедура.

След като двойка ключ/стойност е зададена за сесията, можете да използвате SESSION_CONTEXT() за да върнете стойността на този ключ.

Пример 1 – Задаване и връщане на стойността

Ето пример, който демонстрира основната концепция и употреба.

EXEC sp_set_session_context @key =N'user_id', @value =15;SELECT SESSION_CONTEXT(N'user_id') КАТО user_id;

Резултат:

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

Пример 2 – Когато ключ не съществува

Ето какво се случва, ако се опитате да получите стойността от ключ, който не съществува.

ИЗБЕРЕТЕ SESSION_CONTEXT(N'oops') КАТО опа;

Резултат:

+--------+| опа ||--------|| NULL |+--------+

Пример 3 – Префиксът „N“

Аргументът, предоставен на SESSION_CONTEXT() е от тип sysname . По принцип това е същото като nvarchar(128) NOT NULL , което означава, че трябва да поставите префикс на аргумента с N знак.

Ето какво се случва, ако премахна N префикс:

EXEC sp_set_session_context @key ='език', @value ='Английски';SELECT SESSION_CONTEXT('language') КАТО език;

Резултат:

Съобщение 8116, ниво 16, състояние 1, ред 5 Аргументен тип данни varchar е невалиден за аргумент 1 на функцията session_context.

Като премахнете N префикс, просто предавам varchar , когато трябва да е nvarchar (или име на системата за да бъдем точни).

Ето го с N префикс:

EXEC sp_set_session_context @key =N'език', @value ='Английски';ИЗБЕРЕТЕ SESSION_CONTEXT(N'език') КАТО език;

Резултат:

+-----------+| език ||------------|| Английски |+------------+

Пример 4 – Връщаната стойност

Типът връщане на SESSION_CONTEXT() е sql_variant .

Можете да използвате SQL_VARIANT_PROPERTY() функция, за да разберете основния тип.

Пример:

ИЗБЕРЕТЕ SQL_VARIANT_PROPERTY( SESSION_CONTEXT(N'user_id'), 'BaseType' ) КАТО user_id, SQL_VARIANT_PROPERTY( SESSION_CONTEXT(N'language'), 'BaseType' ) КАТО език;

Резултат:

+-----------+------------+| потребителски_идентификатор | език ||-----------+------------|| int | varchar |+-----------+------------+

Пример 5 – Конкатенация на върнати стойности

Ако трябва да обедините няколко резултата, ще трябва да конвертирате резултатите в тип данни, различен от sql_variant първо.

Ето пример за това какво се случва, ако не направя това:

Пример:

EXEC sp_set_session_context N'user_fname', 'Homer';EXEC sp_set_session_context N'user_lname', 'Simpson';SELECT CONCAT( SESSION_CONTEXT(N'user_fname'), SESSION_CONTEXT(N'user_lname')pre.> 

Резултат:

Съобщение 257, ниво 16, състояние 3, ред 1 Неявно преобразуване от тип данни sql_variant към varchar не е разрешено. Използвайте функцията CONVERT, за да изпълните тази заявка.

Така че трябва изрично да конвертирам резултатите с помощта на CAST() или CONVERT() преди да ги свържете.

Пример:

EXEC sp_set_session_context N'user_fname', 'Homer';EXEC sp_set_session_context N'user_lname', 'Simpson';SELECT CONCAT( CAST(SESSION_CONTEXT(N'user_fname') AS varchar(5)_CONTEXT(SESSION' user_lname') AS varchar(7)) ) AS Резултат;

Резултат:

+--------------+| Резултат ||--------------|| Хоумър Симпсън |+--------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвате RANK() в SQL Server

  2. Как да промените поредния номер на пощенски акаунт в база данни в профил в SQL Server (T-SQL)

  3. Нулиране на AutoIncrement в SQL Server след изтриване

  4. Как да върнете всички ненадеждни ограничения CHECK в SQL Server (пример за T-SQL)

  5. Как да видите регистрационните файлове на транзакциите в SQL Server 2008