I SQL Server kan du bruge SESSION_CONTEXT()
funktion til at læse værdien af en specificeret nøgle i den aktuelle sessionskontekst.
Nøglen (nøgle/værdi-par) skal indstilles først. Dette kan gøres med sp_set_session_context
gemt procedure.
Når et nøgle/værdi-par er blevet indstillet til sessionen, kan du bruge SESSION_CONTEXT()
for at returnere nøglens værdi.
Eksempel 1 – Indstil og returner værdien
Her er et eksempel, der demonstrerer det grundlæggende koncept og brugen.
EXEC sp_set_session_context @key = N'user_id', @value = 15; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Resultat:
+-----------+ | user_id | |-----------| | 15 | +-----------+
Eksempel 2 – Når en nøgle ikke eksisterer
Her er, hvad der sker, hvis du forsøger at få værdien fra en nøgle, der ikke eksisterer.
SELECT SESSION_CONTEXT(N'oops') AS oops;
Resultat:
+--------+ | oops | |--------| | NULL | +--------+
Eksempel 3 – "N"-præfikset
Argumentet til SESSION_CONTEXT()
er af typen sysname . Grundlæggende er dette det samme som nvarchar(128) NOT NULL
, hvilket betyder, at du skal præfikse argumentet med N
tegn.
Her er, hvad der sker, hvis jeg fjerner N
præfiks:
EXEC sp_set_session_context @key = 'language', @value = 'English'; SELECT SESSION_CONTEXT('language') AS language;
Resultat:
Msg 8116, Level 16, State 1, Line 5 Argument data type varchar is invalid for argument 1 of session_context function.
Ved at fjerne N
præfiks, passerer jeg simpelthen en varchar , når det skal være nvarchar (eller sysname for at være præcis).
Her er den med N
præfiks:
EXEC sp_set_session_context @key = N'language', @value = 'English'; SELECT SESSION_CONTEXT(N'language') AS language;
Resultat:
+------------+ | language | |------------| | English | +------------+
Eksempel 4 – Returneringsværdien
Returtypen SESSION_CONTEXT()
er sql_variant .
Du kan bruge SQL_VARIANT_PROPERTY()
funktion for at finde ud af basistypen.
Eksempel:
SELECT SQL_VARIANT_PROPERTY( SESSION_CONTEXT(N'user_id'), 'BaseType' ) AS user_id, SQL_VARIANT_PROPERTY( SESSION_CONTEXT(N'language'), 'BaseType' ) AS language;
Resultat:
+-----------+------------+ | user_id | language | |-----------+------------| | int | varchar | +-----------+------------+
Eksempel 5 – Sammenkædning af returværdier
Hvis du har brug for at sammenkæde flere resultater, skal du konvertere resultaterne til en anden datatype end sql_variant først.
Her er et eksempel på, hvad der sker, hvis jeg ikke gør dette:
Eksempel:
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 Result;>
Resultat:
Msg 257, Level 16, State 3, Line 1 Implicit conversion from data type sql_variant to varchar is not allowed. Use the CONVERT function to run this query.
Så jeg skal eksplicit konvertere resultaterne ved at bruge enten CAST()
eller CONVERT()
før du sammenkæder dem.
Eksempel:
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;
Resultat:
+--------------+ | Result | |--------------| | HomerSimpson | +--------------+