Banco de dados

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
Quer se aprofundar em Segurança de Redes de Computadores e Cibersegurança?

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.

CLIQUE NA IMAGEM ABAIXO E SAIBA MAIS DETALHES:

Link do curso:  https://go.hotmart.com/A69498318E

Transact-SQL (T-SQL)

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
 https://youtube.com/criandobits

Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *