Diretrizes para a execução de gatilhos de logon

Este tópico discute as diretrizes para a especificação da ordem de acionamento de gatilhos de logon e o gerenciamento das transações dentro desses gatilhos.

Especificando o primeiro e o último gatilho

Podem ser definidos vários gatilhos no evento LOGON. Qualquer um deles pode ser designado como o primeiro ou último gatilho a ser acionado mediante um evento, por meio do procedimento armazenado do sistema sp_settriggerorder. O SQL Server não garante a ordem de execução dos demais gatilhos. Para obter mais informações, consulte Projetando e implementando o armazenamento estruturado (Mecanismo de Banco de Dados).

Gerenciando transações

Antes do SQL Server acionar um gatilho de logon, o SQL Server cria uma transação implícita independente de qualquer transação de usuário. Assim, quando o primeiro gatilho de logon é acionado, a contagem de transações é 1. Terminada a execução de todos os gatilhos de logon, a transação é confirmada. Como em outros tipos de gatilhos, o SQL Server retornará um erro se o gatilho de logon terminar a execução com uma contagem de transações de 0. A instrução ROLLBACK TRANSACTION zera a contagem de transações, mesmo quando é emitida dentro de uma transação aninhada. COMMIT TRANSACTION pode decrementar a contagem de transações para 0. Logo, nós não aconselhamos emitir instruções COMMIT TRANSACTION dentro de gatilhos de logon.

Considere o seguinte ao usar uma instrução ROLLBACK TRANSACTION dentro de gatilhos de logon:

  • Toda modificação de dados efetuada até o ponto de ROLLBACK TRANSACTION é revertida. Isso inclui modificações feitas pelo gatilho atual e por gatilhos anteriores executados no mesmo evento. Quaisquer gatilhos restantes para o evento específico não são executados.

  • O gatilho atual continua a executar todas as instruções restantes que apareçam depois da instrução ROLLBACK. Se alguma dessas instruções modificar dados, as modificações não serão revertidas.

Não será estabelecida uma sessão de usuário se ocorrer uma das seguintes condições durante a execução de um gatilho em um evento LOGON:

  • A transação implícita original é revertida ou falha.

  • Um erro com severidade maior que 20 é emitido dentro do corpo do gatilho.