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

7 Respostas to “Criando TRIGGER em SQL”

  1. Leandro Says:

    Olá,

    Primeiramente, gostei bastante deste site… Achei bem sucinto e direto ao “ponto”.

    Agora gostaria de uma ajuda: eu tenho uma trigger em uma tabela “A” que após o INSERT/DELETE faz o UPDATE em uma tabela “B” em um campo que informa a qtde. de registros constantes na “A”… Isto porque a “A” tem quase 7milhões de registros e a “B” tem menos de 100mil.

    Minha dúvida é: isto consome muito recurso, ou neste caso não faz diferença. Outra, teria como fazer isto de outra forma?

    Muito obrigado, e sucesso!

    Leandro

  2. Robson.Oliveira Says:

    Olá gostei muito de suas idéias e gostaria de a prender cada vez mais sobre as triggers
    Aqui vai então mais uma duvida
    tenho duas tabelas dvd_est e dvd_sai
    sendo que tenho mais de 2000 registros e uma faz liganção com a outra,cada vez que sai um produto
    tenho que dar baixa na tabela dvd_sai
    mais tambem tenho que fazer isso manualmente na outra tabela “dvd_est”como faço para que a trigger
    delete da tabela dvd_est e insira em uma terceira
    se você poder me ajudar ficaria muito grato
    Email.piralok@hotmail.com

    • Rui Says:

      Olá.
      Não sei se já resolveste esse teu problema mas se conseguiste resolver podias-me enviar o codigo é que eu preciso de um trigger que faça exactamente o que tu descreveste.
      Se me enviasses ficaria muito agradecido
      email: legolas_cnvv@hotmail.com

  3. Gustavo Says:

    Legal, gostaria de saber porque triggers fazem o desempenho diminuir. Por que?

  4. Gabriel Says:

    Bom dia, estou com um problema para criacao de uma trigger que execulte a cada 15 segundos alguem saberia com eu faria isso…

  5. Paulo Says:

    Boa noite. Escreve Paulo de Portugal e queria dar-te os parabens pela forma clara como explicas o funcionamento dos triggers. Tenho um trabalho que vou precisar da tua ajuda/serviço sff. Mesmo pagando preciso que me indiques o teu email para poder enviar-te o que pretendo e assim poder.mos comunicar sff.

  6. italo Says:

    bom gostei pra caramba,queria saber como criar uma trigger para deixar o nome de todos os empregados caixa alta.


Deixar mensagem para italo Cancelar resposta