Triggers em Transact - SQL

Informática

29/03/2008

Assim como um gatilho dispara um projétil de uma arma para que este possa acertar o seu alvo, da mesma maneira um trigger dispara uma série de ações para cumprir um objetivo específico.
 
Muitas pessoas possuem dúvidas de como fazer tais disparos de ações em uma base de dados.
 
Em vista desta necessidade, nessa matéria veremos o conceito de triggers e como criá-los baseado no Transact-SQL.
 
Um trigger é automaticamente executado quando um comando do tipo INSERT, DELETE ou UPDATE é executado em uma tabela.
 
A principal aplicação de uma trigger é a criação de restrições de acesso ao banco de dados, como rotinas de segurança.
 
Em vez de deixarmos o controle da aplicação para a própria tabela, passamos a executar por meio de triggers, ou gatilhos, esses controles, tornando muito mais seguro o manuseio de nossa base de dados.
 
Entre as várias utilidades de um trigger, podemos destacar:
  • Criar mecanismos de validação, os quais envolvam pesquisas em mais de uma tabela;
  • Inserir o conteúdo de uma coluna derivada de outras colunas;
  • Atualizar outras tabelas em função de inclusão ou alteração de dados da tabela que estamos utilizando;
  • Criação de logs, ou registros de inclusão e alterações de usuários.

Há outras aplicações que podemos fazer com triggers, isso depende da necessidade do desenvolvedor ou DBA. 

Devemos ter em mente dois importantes aspectos de um trigger:
 
Primeiramente que a ação executada pelo trigger é o bloco Transact-SQL que criamos e que um trigger pode ser acionado pelos comandos INSERT, DELETE e UPDATE além de poder ser chamado quando mais de uma ação ocorrer;
 
Limitações do uso de um trigger
  • Um trigger pode executar comandos contidos em seu corpo ou acionar uma stored procedure e outros triggers para executar determinadas tarefas;
  • Pode-se especificar qualquer comando SET dentro de um trigger.
  • Ele permanecerá ativo durante toda a execução do trigger;
  • Não é possível criar um trigger para uma visão. Porém, quando uma visão é utilizada, os triggers da tabela que está sendo utilizada são normalmente acionados;
  • Quando um trigger é executado os resultados são retornados para a aplicação que o chamou.
  • Para evitar o retorno de resultados, recomenda-se não utilizar comandos SELECT que retornem resultados ou que executem a atribuição de conteúdo a variáveis.
  • O comando TRUNCATE TABLE não consegue ser interceptado por um trigger do tipo DELETE.
  • O comando WRITETEXT não ativa um trigger;

Há também certos comandos Trasact-SQL que não podem ser utilizados dentro de um trigger como, por exemplo: ALTER DATABASE, ALTER PROCEDURE, CREATE DATABASE, CREATE INDEX, DROP DATABASE, DROP PROCEDURE, entre outros. 

Criando um trigger
Um trigger pode ser criado com o uso do Transact-SQL CREATE TRIGGER, ou por meio do enterprise manager.
Nos dois casos é necessária a digitação dos comandos SQL.
 
Exemplo de criação de um trigger:
CREATE TRIGGER nome_do_trigger
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
} ]
sql_statement [ ...n ]
}
}
 
Onde:
ON - Indica a tabela ou visão para o qual o trigger está sendo criado;
FOR - Deve ser seguido do tipo de comando ou comandos que disparam o trigger;
AFTER - Especifica que o trigger é disparado apenas quando todas as operações especificadas no comando de disparo forem executadas com sucesso. Todas as ações contraints devem ter sido bem sucedidas antes de o trigger ser executado. AFTER é padrão se apenas FOR for especificado.Os triggers do tipo AFTER não pode ser definidos em visões;
INSTEAD OFF - Especifica que o trigger é executado em vez do comando de disparo desse trigger, ou seja, em vez do comando INSERT, o trigger será executado. Podem existir triggers INSTEAD OF para cada comando INSERT, UPDATE.
Os triggers INSTEAD OF não são permitidos em visões com a opção WITH CHECK OPTION.
 
Exemplo prático de um trigger
Neste exemplo imagine que possuímos uma tabela onde ficam armazenados artigos.
A cada alteração feita na tabela imprimirá uma mensagem na tela 'Artigo alterado com sucesso!'.
CREATE TRIGGER TRG_Artigos
ON Artigos
FOR INSERT, UPDATE
AS PRINT('Artigo alterado com sucesso!')
GO
Para alterar um trigger usamos o comando ALTER TRIGGER nome_do_trigger.
Para excluir um trigger utilizamos o comando DROP TRIGGER nome_do_trigger.
Lembrando que se a tabela que contém o trigger for eliminada o trigger também será.
Fonte: Thiago Caserta - iMasters
 

Esta apresentação reflete a opinião pessoal do autor sobre o tema, podendo não refletir a posição oficial do Portal Educação.


Colunista Portal - Educação

por Colunista Portal - Educação

O Portal Educação possui uma equipe focada no trabalho de curadoria de conteúdo. Artigos em diversas áreas do conhecimento são produzidos e disponibilizados para profissionais, acadêmicos e interessados em adquirir conhecimento qualificado. O departamento de Conteúdo e Comunicação leva ao leitor informações de alto nível, recebidas e publicadas de colunistas externos e internos.

Portal Educação

UOL CURSOS TECNOLOGIA EDUCACIONAL LTDA, com sede na cidade de São Paulo, SP, na Alameda Barão de Limeira, 425, 7º andar - Santa Cecília CEP 01202-001 CNPJ: 17.543.049/0001-93