Qual é a diferença entre FOR
e AFTER
gatilhos?
Qual é a diferença entre FOR
e AFTER
gatilhos?
Respostas:
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 OF
gatilho é 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 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.
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