O que são Triggers no SQL Server

Publicado por MapexMind em: novembro 6, 2013

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:

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

INSTEAD OF

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?

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