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
outubro 23, 2007 às 12:17 pm
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
setembro 8, 2008 às 3:16 pm
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
junho 9, 2011 às 9:04 pm
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
outubro 13, 2010 às 4:06 pm
Legal, gostaria de saber porque triggers fazem o desempenho diminuir. Por que?
fevereiro 6, 2011 às 3:15 pm
Bom dia, estou com um problema para criacao de uma trigger que execulte a cada 15 segundos alguem saberia com eu faria isso…
dezembro 6, 2011 às 11:40 pm
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.
junho 18, 2015 às 6:21 pm
bom gostei pra caramba,queria saber como criar uma trigger para deixar o nome de todos os empregados caixa alta.