Criando TRIGGER em SQL
outubro 17, 2007
Apesar de TRIGGERS SQL serem muito úteis, não é aconselhável a utilização deste tipo de instrução, pelo fato de prejudicar a performance. Mesmo assim irei demonstrar como criar TRIGGERS.
TRIGGER é um tipo de PROCEDURE que é executada automaticamente após uma ação especifica que ocorre em uma tabela ou view (por isso prejudica a performance).
Segue abaixo a sintaxe para criação:
CREATE TRIGGER
nome_da_trigger
ON { TABLE | VIEW }
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] } }
}
nome_da_trigger: Nome que deseja rotular a TRIGGER;
TABLE | VIEW: Pode-se criar uma TRIGGER apartir de uma Table ou de uma View;
AFTER: Indica que a TRIGGER apenas será acionada após todas as ações terem finalizadas com sucesso. AFTER é padrão caso a instrução FOR for a única palavra-chave especificada na criação da TRIGGER;
INSTEAD OF: Indica que a TRIGGER será executada em vez de ser executada a ação. É possível utilizar a instrução INSTEAD OF com INSERT, UPDATE e/ou DELETE;
Exemplo:
CREATE TRIGGER
tg_Cliente_Excluir
ON
Cliente
INSTEAD OF DELETE
AS
DELETE FROM Cliente WHERE ClienteID IN (SELECT ClienteID FROM deleted)
DELETE FROM ClienteTelefone WHERE ClienteID IN (SELECT ClienteID FROM deleted)
O exemplo acima irá remover todos os telefone(s) do(s) cliente(s) da tabela ‘ClienteTelefone’ antes de remover todos os clientes (Cliente) e esta TRIGGER está sendo aplicada a tabela ‘Cliente’. Repare que está sendo utilizado a instrução INSTEAD OF que em vez excluir (DELETE) o registro pela ação irá excluir ao final da TRIGGER.
CREATE TRIGGER
tg_Cliente_Cadastrar
ON
Cliente
AFTER INSERT
AS
INSERT INTO
ClienteLog
SELECT
ClienteID,
GETDATE(),
‘INSERT’
FROM
Cliente
O exemplo acima irá inserir no log da tabela ‘Cliente’ (ClienteLog) todos os IDs depois de ocorrer a execução do INSERT na tabela ‘Cliente’.
Caso precise alterar a TRIGGER, basta substituir a palavra CREATE por ALTER e adicionar a nova consulta.
Existem diversos parâmetros que pode ser passados para uma TRIGGER, mas não vou me aprofundar muito.
Fonte: MSDN Microsoft