Partilhar via


SESSION_CONTEXT (Transact-SQL)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL analytics endpoint in Microsoft FabricWarehouse em Microsoft FabricSQL database in Microsoft Fabric

Retorna o valor da chave especificada no contexto de sessão atual. O valor é definido usando o procedimento sp_set_session_context .

Transact-SQL convenções de sintaxe

Sintaxe

SESSION_CONTEXT(N'key')

Argumentos

'Chave'

A chave do valor que está sendo recuperado. chave é sysname.

Tipos de devolução

sql_variant

Valor de retorno

O valor associado à chave especificada no contexto da sessão ou NULL se nenhum valor estiver definido para essa chave.

Permissões

Qualquer usuário pode ler o contexto da sessão para sua sessão.

Observações

O comportamento do MARS para SESSION_CONTEXT' é semelhante ao de CONTEXT_INFO. Se um lote MARS definir um par chave-valor, o novo valor não será retornado em outros lotes MARS na mesma conexão, a menos que eles tenham sido iniciados após a conclusão do lote que definiu o novo valor. Se vários lotes MARS estiverem ativos em uma conexão, os valores não poderão ser definidos como read_only. Isso evita condições raciais e o não determinismo sobre qual valor ganha.

Exemplos

O exemplo simples a seguir define o valor de contexto de sessão para chave user_id como 4 e, em seguida, usa a SESSION_CONTEXT função para recuperar o valor.

EXECUTE sp_set_session_context 'user_id', 4;

SELECT SESSION_CONTEXT(N'user_id');

Problemas conhecidos

Questão Data de descoberta Situação Data concluída
Uma exceção de violação de acesso (AV) pode ocorrer com a SESSION_CONTEXT função sob determinadas condições. Você pode encontrar exceções AV ou resultados errados quando a função é executada SESSION_CONTEXT dentro de um plano de execução paralela quando a sessão é redefinida para reutilização.

Uma correção, que foi introduzida no SQL Server 2019 (15.x) 14 para resolver um problema de resultados errados com SESSION_CONTEXT planos paralelos, foi posteriormente encontrada para causar exceções de AV sob determinadas condições.

Para atenuar esse problema, você pode habilitar o sinalizador de rastreamento 11042 como um sinalizador de rastreamento de inicialização, global ou de sessão. Esse sinalizador de rastreamento força SESSION_CONTEXT a execução em série, impedindo que ele participe de planos de consulta paralelos.

Aplica-se a: SQL Server 2019 (15.x) 14 e versões posteriores.
Janeiro de 2022 Tem solução alternativa