No SQL Server, você pode usar o
sp_set_session_context
procedimento armazenado para definir pares de chave/valor no contexto da sessão. Esses pares de chave/valor permanecem em seu contexto de sessão até que sua conexão com o SQL Server seja fechada. Você pode usar esses valores em procedimentos armazenados e outros códigos T-SQL ao longo da vida de sua sessão.
Esse método para manter o estado da sessão foi introduzido pela primeira vez no SQL Server 2016. Antes dessa versão, você precisaria usar
SET CONTEXT_INFO
, que fornece uma maneira semelhante, mas muito mais limitada, de armazenar o estado da sessão. Exemplo 1 – Defina o valor
Aqui está um exemplo para demonstrar como usar
sp_set_session_context
para definir um par chave/valor. EXEC sp_set_session_context @key = N'user_id', @value = 15;
Você também pode usar a seguinte sintaxe:
EXEC sp_set_session_context 'user_id', 15;
Há também um sinalizador opcional somente leitura que você pode definir. Veja abaixo um exemplo.
Exemplo 2 – Leia o valor
Você pode usar o
SESSION_CONTEXT()
função para ler o valor de uma chave. Veja como ler o valor que defini no exemplo anterior.
SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Resultado:
+-----------+ | user_id | |-----------| | 15 | +-----------+
Exemplo 3 – Atualizar o valor
Você pode atualizar o valor, desde que não o tenha especificado como somente leitura.
EXEC sp_set_session_context 'user_id', 73; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Resultado:
+-----------+ | user_id | |-----------| | 73 | +-----------+
Exemplo 4 – Definir como somente leitura
Como mencionado, há também um sinalizador opcional somente leitura que você pode definir. Um valor de
1
define como somente leitura e um valor de 0
(o padrão) não é somente leitura. Se você defini-lo como somente leitura, não poderá atualizar o valor sem desconectar e reconectar ao SQL Server.
Aqui está um exemplo de configuração do sinalizador somente leitura.
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 | +-----------+
Agora, vamos tentar alterar o 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.