En SQL Server, puede usar SESSION_CONTEXT() función para leer el valor de una clave específica en el contexto de la sesión actual.
La clave (par clave/valor) debe configurarse primero. Esto se puede hacer con el sp_set_session_context procedimiento almacenado.
Una vez que se ha establecido un par clave/valor para la sesión, puede usar SESSION_CONTEXT() para devolver el valor de esa clave.
Ejemplo 1:establecer y devolver el valor
Aquí hay un ejemplo que demuestra el concepto básico y el uso.
EXEC sp_set_session_context @key = N'user_id', @value = 15; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Resultado:
+-----------+ | user_id | |-----------| | 15 | +-----------+
Ejemplo 2:cuando una clave no existe
Esto es lo que sucede si intenta obtener el valor de una clave que no existe.
SELECT SESSION_CONTEXT(N'oops') AS oops;
Resultado:
+--------+ | oops | |--------| | NULL | +--------+
Ejemplo 3:el prefijo "N"
El argumento proporcionado a SESSION_CONTEXT() es de tipo sysname . Básicamente, esto es lo mismo que nvarchar(128) NOT NULL , lo que significa que debe prefijar el argumento con N personaje.
Esto es lo que sucede si elimino la N prefijo:
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT('language') AS language;
Resultado:
Msg 8116, Level 16, State 1, Line 5 Argument data type varchar is invalid for argument 1 of session_context function.
Eliminando el N prefijo, simplemente paso un varchar , cuando debería ser nvarchar (o nombre del sistema para ser exacto).
Aquí está con el N prefijo:
EXEC sp_set_session_context @key = N'language', @value = 'English'; SELECT SESSION_CONTEXT(N'language') AS language;
Resultado:
+------------+ | language | |------------| | English | +------------+
Ejemplo 4:el valor de retorno
El tipo de retorno de SESSION_CONTEXT() es sql_variant .
Puede usar SQL_VARIANT_PROPERTY() función para averiguar el tipo base.
Ejemplo:
SELECT
SQL_VARIANT_PROPERTY(
SESSION_CONTEXT(N'user_id'), 'BaseType'
) AS user_id,
SQL_VARIANT_PROPERTY(
SESSION_CONTEXT(N'language'), 'BaseType'
) AS language;
Resultado:
+-----------+------------+ | user_id | language | |-----------+------------| | int | varchar | +-----------+------------+
Ejemplo 5:concatenación de valores devueltos
Si necesita concatenar varios resultados, deberá convertir los resultados a un tipo de datos que no sea sql_variant primero.
Este es un ejemplo de lo que sucede si no hago esto:
Ejemplo:
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;
Resultado:
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.
Entonces necesito convertir explícitamente los resultados usando CAST() o CONVERT() antes de concatenarlas.
Ejemplo:
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;
Resultado:
+--------------+ | Result | |--------------| | HomerSimpson | +--------------+