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

Qual é o escopo de CONTEXT_INFO no SQL Server?


As informações de contexto não têm escopo (no sentido de escopo de variáveis ​​de linguagem) e estão vinculadas ao tempo de vida da sessão. Uma vez definido, as informações de contexto permanecem no valor definido até que a conexão seja fechada (a sessão termina) ou até que um novo valor seja definido. Como a execução em uma sessão é sempre sequencial, não há questão de simultaneidade.

SE você definir as informações de contexto em um procedimento, qualquer gatilho executado posteriormente nessa sessão verá o valor das informações de contexto recém-definidas. Definir o valor do ID do usuário nas informações de contexto, como você propõe, e usá-lo em gatilhos é o exemplo típico do uso de informações de contexto e é perfeitamente seguro em relação à simultaneidade, pois basicamente não há simultaneidade. Se você planeja definir as informações de contexto em um procedimento armazenado e, em seguida, confiar nele em um gatilho que é executado devido a exclusões que ocorrem no referido procedimento, seu lote ainda não foi concluído, portanto, de acordo com o artigo que você vinculou, você recupera as informações do conetxt do sys.dm_exec_requests DMV ou do CONTEXT_INFO() função. Ele ainda não será enviado em sys.dm_exec_sessions , isso só pode acontecer depois que você sair do procedimento armazenado e concluir qualquer outra chamada no lote T-SQL enviado ao servidor (o 'request').