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