Trigger
Um TRIGGER, ou gatilho, é um objeto de banco de dados, associado a uma tabela, definido para ser disparado, respondendo a um evento em particular.
Tais eventos são os comandos DML (Data Manipulation Language): INSERT, REPLACE, DELETE ou UPDATE.
Podemos definir inúmeros TRIGGERS em uma base de dados baseados diretamente em qual dos comandos acima irá dispará-lo, sendo que, para cada um, podemos definir apenas um TRIGGER. Os TRIGGERS poderão ser disparados para trabalharem antes ou depois do evento.
A sintaxe para a criação de um Trigger:
CREATE TRIGGER "nome"
ON tabela //define em qual tabela o trigger vai agir
FOR "comando DML" //comando DML que aciona o trigger
AS
BEGIN
<declarações>
END
Criação de um trigger:
CREATE TRIGGER trg_atualiza_data //define a trigger
ON cadastro_clientes //define a tabela na qual a trigger vai agir
FOR INSERT //a trigger será disparada ao executar o comando INSERT
//ações que a trigger irá executar
AS
BEGIN
DECLARE //declaração de variáveis
@codigo_cliente int,
@nome varchar(100),
@data_de_hoje date;
//serão armazenados os dados do cliente que acabou de ser inserido no banco de dados
SELECT //pega os valores informados e atribui as variáveis
@codigo_cliente = codigo_cliente,
@nome = nome,
@data_de_hoje = GETDATE() //pega data do servidor
FROM
INSERTED //pega último registro inserido na tabela de clientes (cadastro_clientes)
/* será executado o comando de inserção na outra tabela pelo trigger usando os valores
armazenados nas variáveis */
INSERT INTO datas_cadastros (codigo_cliente, data_cadastro)
VALUES(@codigo_cliente, @data_de_hoje)
END
Também é possível utilizar condições dentro dos blocos DECLARE e informar possíveis inconsistências ou erros:
DECLARE
@codigo int,
@nome varchar(100),
@salario money
SELECT
@nome = nome, @salario = salario FROM funcionarios
IF(@salario < 998.00)
BEGIN
RAISERROR('O salário não pode ser inferior ao salário mínimo!', 16, 1)//(16, 1) é a descrição de erros de usuário
ROLLBACK TRANSACTION //As transações são desfeitas
END
Uma boa prática é definir valores vindos de tabelas com o comando SELECT. Já para valores vindos de funções ou valores literais, o comando a ser utilizado é o SET:
SELECT @produto = produto FROM inserted
SET @data = GETDATE()
Para fazer o trigger disparar:
//executa um comandos simples de inclusão no banco de dados
INSERT INTO cadastro_clientes(codigo_cliente, nome, data)
VALUES(1,'Benedito', GETDATE())
Ao executar o comando INSERT o trigger irá disparar a ação de inserir a data atual do servidor na outra tabela.
Para excluir o trigger:
DROP TRIGGER trg_atualiza_data
GO
Listar todas as triggers criadas:
SELECT * FROM sys.triggers
Conheça o curso de Segurança em Redes de Computadores e entenda os diversos tipos de ataques que existem, bem como as peças do quebra-cabeça que integram a defesa de uma rede, entre elas: Firewall, IPS, Proxy, Anti-Spam, Anti-vírus, Anti-Malware, VPN, Sandboxing, NAC, etc.
Link do curso: https://go.hotmart.com/A69498318E
Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits