Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Definir pares de chave/valor no contexto de sessão no SQL Server (sp_set_session_context)


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.