W SQL Server możesz użyć SESSION_CONTEXT()
funkcja odczytu wartości określonego klucza w kontekście bieżącej sesji.
Najpierw należy ustawić klucz (para klucz/wartość). Można to zrobić za pomocą sp_set_session_context
procedura składowana.
Po ustawieniu pary klucz/wartość dla sesji możesz użyć SESSION_CONTEXT()
aby zwrócić wartość tego klucza.
Przykład 1 – Ustaw i zwróć wartość
Oto przykład, który demonstruje podstawową koncepcję i zastosowanie.
EXEC sp_set_session_context @key =N'identyfikator_użytkownika', @wartość =15;WYBIERZ SESJĘ_CONTEXT(N'identyfikator_użytkownika') AS user_id;
Wynik:
+-----------+| identyfikator_użytkownika ||-----------|| 15 |+-----------+
Przykład 2 – Kiedy klucz nie istnieje
Oto, co się stanie, jeśli spróbujesz uzyskać wartość z klucza, który nie istnieje.
SELECT SESSION_CONTEXT(N'Ups') AS ups;
Wynik:
+--------+| ups ||--------|| NULL |+--------+
Przykład 3 – Przedrostek „N”
Argument dostarczony do SESSION_CONTEXT()
jest typu sysname . Zasadniczo jest to to samo, co nvarchar(128) NOT NULL
, co oznacza, że musisz poprzedzić argument N
znak.
Oto, co się stanie, jeśli usunę N
prefiks:
EXEC sp_set_session_context @key ='język', @value ='angielski';WYBIERZ SESSION_CONTEXT('język') AS;
Wynik:
Msg 8116, Level 16, State 1, Line 5Argument typ danych varchar jest nieprawidłowy dla argumentu 1 funkcji session_context.
Usuwając N
prefiks, po prostu przekazuję varchar , kiedy powinno być nvarchar (lub nazwa systemu byc dokładnym).
Tutaj jest z N
prefiks:
EXEC sp_set_session_context @key =N'język', @value ='angielski';WYBIERZ SESSION_CONTEXT(N'język') AS;
Wynik:
+----------------+| język ||------------|| angielski |+------------+
Przykład 4 – Wartość zwrotu
Zwracany typ SESSION_CONTEXT()
to sql_variant .
Możesz użyć SQL_VARIANT_PROPERTY()
funkcja, aby znaleźć typ bazy.
Przykład:
SELECT SQL_VARIANT_PROPERTY( SESSION_CONTEXT(N'user_id'), 'BaseType') AS user_id, SQL_VARIANT_PROPERTY(SESSION_CONTEXT(N'language'), 'BaseType') język AS;
Wynik:
+-----------+------------+| identyfikator_użytkownika | język ||-----------+------------|| int | varchar |+-----------+----------------+
Przykład 5 – Łączenie wartości zwracanych
Jeśli chcesz połączyć wiele wyników, musisz je przekonwertować na typ danych inny niż sql_variant pierwszy.
Oto przykład tego, co się stanie, jeśli tego nie zrobię:
Przykład:
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 AS Result;>Wynik:
Msg 257, poziom 16, stan 3, wiersz 1 Niejawna konwersja typu danych sql_variant na varchar nie jest dozwolona. Użyj funkcji CONVERT, aby uruchomić to zapytanie.Więc muszę jawnie przekonwertować wyniki za pomocą
CAST()
lubCONVERT()
przed ich połączeniem.Przykład:
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) nazwa_użytkownika') AS varchar(7)) ) AS Wynik;Wynik:
+--------------+| Wynik ||--------------|| HomerSimpson |+---------------+