V SQL Server můžete použít SESSION_CONTEXT()
funkce pro čtení hodnoty zadaného klíče v kontextu aktuální relace.
Nejprve je třeba nastavit klíč (pár klíč/hodnota). To lze provést pomocí sp_set_session_context
uložené procedury.
Jakmile je pro relaci nastaven pár klíč/hodnota, můžete použít SESSION_CONTEXT()
vrátit hodnotu tohoto klíče.
Příklad 1 – Nastavení a vrácení hodnoty
Zde je příklad, který demonstruje základní koncept a použití.
EXEC sp_set_session_context @key =N'user_id', @value =15;SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Výsledek:
+------------+| user_id ||------------|| 15 |+-----------+
Příklad 2 – Když klíč neexistuje
Co se stane, když se pokusíte získat hodnotu z klíče, který neexistuje.
SELECT SESSION_CONTEXT(N'oops') JAKO Jejda;
Výsledek:
+---------+| jejda ||---------|| NULL |+--------+
Příklad 3 – Předpona „N“
Argument poskytnutý SESSION_CONTEXT()
je typu sysname . V podstatě je to stejné jako nvarchar(128) NOT NULL
, což znamená, že před argument musíte přidat N
postava.
Zde je to, co se stane, když odstraním N
prefix:
EXEC sp_set_session_context @key ='jazyk', @value ='angličtina';SELECT SESSION_CONTEXT('language') JAKO jazyk;
Výsledek:
Zpráva 8116, úroveň 16, stav 1, řádek 5 Datový typ argumentu varchar je neplatný pro argument 1 funkce session_context.
Odebráním N
prefix, jednoduše předávám varchar , kdy by měl být nvarchar (nebo název systému být přesný).
Tady je to s N
prefix:
EXEC sp_set_session_context @key =N'language', @value ='Angličtina';SELECT SESSION_CONTEXT(N'language') JAKO jazyk;
Výsledek:
+-------------+| jazyk ||-------------|| anglicky |+------------+
Příklad 4 – Návratová hodnota
Návratový typ SESSION_CONTEXT()
je sql_variant .
Můžete použít SQL_VARIANT_PROPERTY()
funkce pro zjištění základního typu.
Příklad:
SELECT SQL_VARIANT_PROPERTY( SESSION_CONTEXT(N'user_id'), 'BaseType' ) AS user_id, SQL_VARIANT_PROPERTY( SESSION_CONTEXT(N'language'), 'BaseType' ) JAKO jazyk;
Výsledek:
+-----------+------------+| user_id | jazyk ||-----------+------------|| int | varchar |+-----------+------------+
Příklad 5 – Zřetězení návratových hodnot
Pokud potřebujete zřetězit více výsledků, budete muset výsledky převést na jiný datový typ než sql_variant za prvé.
Zde je příklad toho, co se stane, když to neudělám:
Příklad:
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') ) AS>Výsledek:
Zpráva 257, úroveň 16, stav 3, řádek 1 Implicitní převod z datového typu sql_variant na varchar není povolen. Ke spuštění tohoto dotazu použijte funkci CONVERT.Potřebuji tedy explicitně převést výsledky buď pomocí
CAST()
neboCONVERT()
před jejich zřetězením.Příklad:
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)), CAST(SESSION_CONTEXT(N' user_lname') AS varchar(7)) ) AS Result;Výsledek:
+---------------+| Výsledek ||---------------|| HomerSimpson |+--------------+