Diferença entre os gatilhos FOR e AFTER?

Respostas:

153

Não há diferença, eles fazem a mesma coisa.

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE

É o mesmo que

CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE

Um INSTEAD OFgatilho é diferente e dispara antes e em vez da inserção e pode ser usado em visualizações, a fim de inserir os valores apropriados nas tabelas subjacentes.

Ben
fonte
14
Gostei do comentário sobre inserções em visualizações usando gatilhos. Informação muito útil. Felicidades.
Mariusz
Com licença, senhor @Ben, qual seria o cenário para inserir em uma visualização? Obrigado ^ - ^
Jeancarlo Fontalvo
@JeancarloFontalvo, 1) compatibilidade. As tabelas subjacentes podem mudar, desde que a visão permaneça a mesma. 2) controle de acesso, certos usuários podem ter permissão para escrever apenas em certas colunas.
Ben,
17

@Ben está absolutamente certo.

Aqui está o artigo do MSDN Explorando o SQL Server Triggers

Um parágrafo do artigo:

Essa sintaxe também é aceitável em versões anteriores do SQL Server. No entanto, agora que existem dois tipos de gatilhos no SQL Server 2000, prefiro me referir aos gatilhos FOR como gatilhos AFTER. Portanto, no restante deste artigo, irei me referir aos gatilhos AFTER ou INSTEAD OF.

Como o gatilho AFTER que você viu antes, esse gatilho evita que alterações sejam feitas no campo de sobrenome. No entanto, ele implementa essa regra de negócios de maneira diferente do exemplo anterior. Como o gatilho INSTEAD OF dispara no lugar da instrução UPDATE, o gatilho INSTEAD OF avalia se o teste de regra de negócios é aprovado ou não. Se o teste de regra de negócios for aprovado, para que a atualização ocorra, o gatilho INSTEAD OF deve chamar explicitamente a instrução UPDATE novamente.

Waqas Raja
fonte
4

AFTER especifica que o gatilho DML é disparado apenas quando todas as operações especificadas na instrução SQL de gatilho foram executadas com êxito. Todas as ações em cascata referencial e verificações de restrição também devem ser bem-sucedidas antes que este gatilho seja disparado. AFTER é o padrão quando FOR é a única palavra-chave especificada.

Os gatilhos AFTER não podem ser definidos nas visualizações.

INSTEAD OF Especifica que o gatilho DML é executado em vez da instrução SQL de gatilho, portanto, substituindo as ações das instruções de gatilho. INSTEAD OF não pode ser especificado para DDL ou gatilhos de logon.

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql

Nour El-Hoda
fonte
1
Esta frase "AFTER é o padrão quando FOR é a única palavra-chave especificada." é muito confuso. Eles poderiam ter formulado melhor.
FMFF