sql >> Base de Datos >  >> RDS >> Sqlserver

Establecer pares clave/valor en el contexto de la sesión en SQL Server (sp_set_session_context)

En SQL Server, puede usar el sp_set_session_context procedimiento almacenado para establecer pares clave/valor en el contexto de la sesión.

Estos pares clave/valor permanecen en el contexto de su sesión hasta que se cierra su conexión con SQL Server. Puede usar estos valores en procedimientos almacenados y otro código T-SQL durante la duración de su sesión.

Este método para mantener el estado de la sesión se introdujo por primera vez en SQL Server 2016. Antes de ese lanzamiento, necesitaría usar SET CONTEXT_INFO , que proporciona una forma similar, pero mucho más limitada, de almacenar el estado de la sesión.

Ejemplo 1:establezca el valor

Aquí hay un ejemplo para demostrar cómo usar sp_set_session_context para establecer un par clave/valor.

EXEC sp_set_session_context
  @key = N'user_id',
  @value = 15;

También podría usar la siguiente sintaxis:

EXEC sp_set_session_context 'user_id', 15;

También hay un indicador opcional de solo lectura que puede configurar. Vea a continuación un ejemplo.

Ejemplo 2:leer el valor

Puede usar el SESSION_CONTEXT() función para leer el valor de una clave.

Así es como se lee el valor que configuré en el ejemplo anterior.

SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Resultado:

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

Ejemplo 3:actualizar el valor

Puede actualizar el valor, siempre que no lo haya especificado como de solo lectura.

EXEC sp_set_session_context 'user_id', 73;
SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Resultado:

+-----------+
| user_id   |
|-----------|
| 73        |
+-----------+

Ejemplo 4:establecer en solo lectura

Como se mencionó, también hay un indicador opcional de solo lectura que puede configurar. Un valor de 1 lo establece en solo lectura y un valor de 0 (el valor predeterminado) no es de solo lectura.

Si lo configura en solo lectura, no podrá actualizar el valor sin desconectarse y volver a conectarse a SQL Server.

Este es un ejemplo de configuración de la marca de solo lectura.

EXEC sp_set_session_context 
  @key = N'user_id', 
  @value = 15, 
  @read_only = 1;
SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Resultado:

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

Ahora, intentemos cambiar el valor:

EXEC sp_set_session_context 'user_id', 73;

Resultado:

Msg 15664, Level 16, State 1, Line 1
Cannot set key 'user_id' in the session context. The key has been set as read_only for this session.