Trigger

Definição

Trigger

Um tipo especial de stored procedure que é executado em determinadas circunstâncias (eventos) associadas à manipulação de dados.

SQL Server suporta dois tipos de trigger: DML e DDL. Só vamos tratar de triggers DML:

  • São criados em tabelas (ou vistas) e têm uma ou mais ações associadas (INSERT, UPDATE, DELETE).

Quando ocorre uma das ações previstas, os triggers são “disparados” (executados).

Exemplos de uso:

  • Maintenance of duplicate and derived data;

  • Complex column constraints;

  • Cascading referential integrity;

  • Complex defaults;

  • Inter-database referential integrity.

Conceitos Básicos

SQL Server triggers são disparados uma vez por cada operação de modificação de dados

  • Não por tuplo afectado – caso da Oracle.

Ter em atenção que os triggers estendem a duração da transação:

  • Pode criar problemas de locks/blocks em sistemas de elevado desempenho.

  • Compromisso entre integridade dos dados e potencial impacto no desempenho.

Existem dois tipos de DML triggers que diferem quanto ao propósito, timing e efeito.

  • instead of

  • after

Transaction Flow

É importante entender em que parte da transação ocorre cada um dos triggers...

  1. IDENTITY INSERT check

  2. Null ability constraint

  3. Data-type check

  4. INSTEAD OF trigger execution

    1. If an INSTEAD OF trigger exists, then execution of the DML stops here. INSTEAD OF triggers are not recursive. Therefore, if the INSERT trigger executes another DML command, then the INSTEAD OF trigger will be ignored the second time around.

  5. Primary-key constraint

  6. Check constraints

  7. Foreign-key constraint

  8. Foreign-key constraint

  9. AFTER trigger execution

  10. Commit transaction

Ideias a reter...

AFTER trigger pode assumir que os dados passaram todos as verificações de integridade de dados.

AFTER trigger ocorre depois de todos os constraints

  • Não pode corrigir eventuais problemas dos dados.

AFTER trigger ocorre antes do commit1 da transação DML. Assim podemos fazer o rollback1 da transação se os dados forem inaceitáveis.

INSTEAD OF trigger – a transação para no ponto 4 e nenhum dos posteriores é executado, incluindo a instrução DML.

INSTEAD OF trigger pode “contornar” problemas de integridade referencial mas não de nulidade, tipo de dados e identidade das colunas.

Create, Enable/Disable, Drop

Sintaxe

Criação

CREATE TRIGGER trigger_name ON <tablename>
AFTER | INSTEAD OF { [INSERT] [,] [UPDATE] [,] [DELETE]}
AS
SQL_Statement

Ativar | Desativa

ALTER TABLE <tablename> ENABLE | DISABLE TRIGGER trigger_name

OU

ENABLE | DISABLE TRIGGER trigger_name ON <tablename>

Eliminar

DROP TRIGGER trigger_name ON <tablename>

Last updated