O que é um TRIGGER
Um gatilho é um tipo especial de procedimento armazenado que é executado automaticamente quando um evento ocorre no servidor de banco de dados.
Para entender uma TRIGGER primeiramente temos que entender como funciona o fluxo de transações no SQL SERVER
Fluxo de transações no SQL SERVER
Todas as transações DML (INSERT, UPDATE OU DELETE) no banco de dados seguem um fluxo de transações que não vemos, mas que o gerenciados do banco de dados executa automaticamente:
- Verificações de IDENTITY INSERT – Verifica se o dado é auto inserido
- Restrições (CONSTRAINT) de nulos (NULL) – Verificação se há restrições de nulos
- Checagem do tipo de dados – Analisa se o dado inserido é compatível com o tipo de dados definido na criação da tabela (varchar, int, etc)
- Execução da trigger INSTEAD OF – A execução da instrução DML para por aqui e é executada a TRIGGER.
- Restrição de Chave Primária –
- Restrição de Check
- Restrição de Chave Estrangeira
- Execução da DML e atualização do log de transação
- Execução da trigger AFTER
- Commint da transação – Confirmação
Os gatilhos DML são executados quando um usuário tenta modificar dados através de um evento DML (linguagem de manipulação de dados). Os eventos DML são instruções INSERT, UPDATE ou DELETE em uma tabela ou exibição. Esses gatilhos são disparados quando qualquer evento válido é acionado, independentemente de quaisquer linhas da tabela serem afetadas ou não.
CREATE TRIGGER trigger_name ON nome_da_table | nome_da_view FOR | AFTER | INSTEAD OF INSERT, UPDATE,DELETE AS Bloco contendo as instruções que serão executadas na TRIGGER
Os gatilhos DDL são executados em resposta a diversos eventos DDL (linguagem de definição de dados). Esses eventos correspondem, basicamente, a instruções Transact-SQL CREATE, ALTER e DROP e determinados procedimentos armazenados do sistema que executam operações do tipo DDL.
CREATE TRIGGER trigger_name ON ALL SERVER | DATABASE FOR | AFTER event_type | event_group AS Bloco contendo as instruções que serão executadas na TRIGGER
Os gatilhos de logon são disparados em resposta ao evento LOGON que é gerado quando as sessões de um usuário estão sendo estabelecidas.
CREATE TRIGGER trigger_name ON ALL SERVER FOR| AFTER LOGON AS sql_statement Bloco contendo as instruções que serão executadas na TRIGGER
EXEMPLO DE USO
CREATE TRIGGER NOME_DA_TRIGGER
ON NOME_DA_TABELA
AFTER UPDATE,INSERT
AS
--UM EXEMPLO QUE PEGA A ATUALIZAÇÃO DOS DADOS EM UMA COLUNA DA TABELA
IF UPDATE(NOME_DA_COLUNA)
BEGIN
--INSIRA AQUI AS INSTRUÇÕES
END
Tipos de TRIGGER
AFTER
- A trigger e executada após a confirmação de uma transação no banco de dados (INSERT, UPDATE OU DELETE)
- Se não declarado o tipo, o AFTER é declarado como padrão
- AFTER pode só pode ser vinculada a TABELAS
INSTEAD OF
- O código presente na TRIGGER é executado no lugar da operação que causou o disparo, ou seja, as declaração DML (INSERT, UPDATE OU DELETE) não simuladas e não executadas.
- AFTER pode ser aplicado em VIEWS
COMO ENCONTRAR UMA TRIGGER PELO NOME
Em uma tabela específica
EXEC sp_helptrigger @tabname=nome_da_tabela
No banco de dados todo
USE nome_do_banco_de_dados SELECT * FROM sys.triggers WHERE is_disabled = 0
Está desabilitado?
- 0 não
- 1 sim
Triggers – Definição e Tipos Instead Of e After – SQL Server – Parte 01
Triggers – Criação e Testes dos modos Instead Of e After – SQL Server – Parte 02
Triggers – Habilitar, Desabilitar e verificar Status – SQL Server – Parte 03
PD – Criar Trigger Básica após Inserir no SQL Server 2012