Triggers no SQL Server

O que é um TRIGGER

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