daniel paulo [email protected]. triggers o sql server oferece dois mecanismos primários para...
TRANSCRIPT
Daniel [email protected]
TriggersO SQL Server oferece dois mecanismos primários
para reforçar as regras de negócio e a integridade dos dados: CONSTRAINTS e TRIGGERS.
Um trigger, também chamado de gatilho, é um tipo especial de STORED PROCEDURE que automaticamente é disparado quando há um evento de linguagem.
TiposTrigger de DDL - Finalidade de disparar stored
procedures para responder comandos DDL (ALTER, DROP e CREATE)
Trigger de DML - Executa comando a partir dos eventos de INSERT, UPDATE ou DELETE
Trigger de Logon - executado quando um usuário inicia uma sessão
- O acionamento do trigger ocorre de forma automática
- Não envia ou recebe parâmetros- Podem gerar erros com o comando RAISERROR- Tanto o Trigger como o comando que o acionou são
tratados como sendo uma única transação- Esta transação pode ser desfeita em qualquer lugar
de dentro da trigger (ROLLBACK)
Comandos que não podem ser executados por trigger:CREATE DROPDISK (TODOS) GRANTLOAD REVOKEALTER TABLE ALTER DATABASETRUNCATE TABLE UPDATE STATISTICSRECONFIGURE RESTORE DATABASERESTORE LOG SELECT INTO
Diferenças entre triggers e constraints- CONSTRAINT - São proativas, o SQL Server
verifica as regras antes da inserção / alteração dos dados
- TRIGGER - São reativas, o SQL executa o comando e depois verifica se existiu algum erro (caso ocorra realiza um ROLLBACK)
TRIGGER DMLUm trigger DML é uma ação programada para executar
quando um evento DML ocorre em um servidor de banco de dados.
- Podem afetar outras tabelas e pode incluir instruções TSQL complexas
- Podem prevenir operações incorretas ou mal intencionadas de INSERT, UPDATE ou DELETE e fazer restrições mais complexas do que as definidas na CONSTRAINT CHECK
- Podem referenciar outras colunas, ao contrário da constraint CHECK
- Podem avaliar o estado de uma tabela antes e depois de uma modificação dos dados e realizar ações com base nas diferenças entre o estado anterior e posterior à modificação dos dados
- Com resposta à uma instrução de modificação de dados, os trigger localizadas em uma mesma tabela permitem que diferentes ações sejam realizadas
Categorias da trigger DMLTRIGGER AFTER - Especificados somente em tabelas, as
trigger AFTER são executadas após a conclusão das ações de INSERT, UPDATE ou DELETE
Trigger INSTEAD OF - Também conhecidas como BEFORE, são executadas independentemente da transação. São aplicadas também as VIEWS
TRIGGER CLR – Triggers que são construídas com métodos escritos na plataforma .NET
ObservaçõesUm trigger normal na verdade é um trigger AFTER.
Este tipo de trigger acontece junto com a transação que disparou o trigger seja ela um INSERT, UPDATE ou um DELETE. Dentro de um trigger AFTER você pode cancelar a ação utilizando um ROLLBACK. Você somente consegue criar triggers AFTER em tabelas.
Tabelas INSERTED e DELETEDO SQL cria em memória uma ou duas tabela
para armazenamento dos dados com os quais a trigger vai trabalhar.
Instrução INSERTED DELETEDINSERT XDELETE XUPDATE Novo Antigo
TRIGGER INSTEAD OFEste trigger é responsável por determinar que o trigger DML seja
executado ao invés do comando SQL ser disparado. Com isso, as ações realizadas por comandos disparados são sobrescritos.
- Apenas 1 trigger por tabela ou view- Não pode ser utilizada com comandos DELETE e UPDATE em
tabelas que possuem relacionamento referencial que determina ações em cascata ON DELETE e ON UPDATE.
TRIGGER DDLExecutam Stored Procedures em resposta a um evento DDL- Prevenir certas alterações no esquema do banco de dados,
ou determinar que algo ocorra no banco de dados conforme a alteração sofrida por este esquema
- Registrar alterações ou eventos realizados no esquema do banco de dados
- Iniciar, parar, pausar, modificar e repetir os resultados de trace
- Regular operações de banco de dados- Operam nas instruções CREATE, ALTER e DROP- Os trigger DDL são disparados somente após uma instrução TSQL ter sido
executada- São ferramentas importantes para registrar as ações administrativas do
sistema- Não existe equivalência entre as operações dos Trigger DDL e dos Trigger
INSTEAD OF- Podemos utilizar a instrução ROLLBACK para interromper as transação
atual- Uma única operação DDL pode executar múltiplos trigger DDL
Visualizando trigger Select name from sys.triggers Object explorer no SSMS Definição da trigger sys.sql_modules
Trigger aninhadasQualquer trigger pode conter uma instrução UPDATE, INSERT
ou DELETE que afete uma tabela. Os trigger são aninhados quando um trigger executa uma ação que inicia outra trigger.
- Por padrão, a opção de configuração de um trigger aninhado é ON no nível do servidor
- Aninhamento de até 32 triggers
Habilitando e desabilitando trigger aninhados- Ajustar o aninhamento de triggers para a opção nested triggers da stored
procedure sp_configure para 0 EXEC sp_configure 'Nested Triggers' , 0 - desabilitaEXEC sp_configure 'Nested Triggers' , 1 - Habilita ouObject Explorerpág 357
Triggers recursivas: é um trigger que executa uma ação que faz com que o mesmo trigger seja disparado novamente, direta ou indiretamente.
Recursão direta: Ocorre quando um trigger é disparado e executa uma ação na mesma tabela que ela seja disparado novamente
Recursão indireta: Quando um trigger é disparado e executada uma ação que faz com que outro trigger seja disparado na mesma tabela ou em outra e, consequentemente, este trigger causa alteração na tabela original. Essa ação acaba disparando novamente o trigger original.
Alterando TRIGGER- ALTER TRIGGER
Desabilitar um TRIGGER- DISABLE TRIGGER
Habilitar um TRIGGER- ENABLE TRIGGER
Apagar um TRIGGER- DROP TRIGGER
Considerações- O SQL verifica primeiramente as Constraints e depois as
TRIGGERS- Tabelas temporárias ou VIEWS não podem possuir
TRIGGERS- Quando trabalhamos com tabelas que possuem chaves
estrangeiras com uma ação DELETE/UPDATE em cascata, os TRIGGERS dos comandos INSTEAD OF DELETE/UPDATE não podem ser definidos
- Os resultados obtidos após o TRIGGER ter sido disparado são retornados à aplicação que o chamou
- Para não retornar dados utilizar o comando SET NOCOUNT
- O recurso de retornar dados a partir de TRIGGERS será excluído em uma versão futura
- O comando TRUNCATE TABLE não ativa TRIGGERS
Exemplo
Laboratório página 374 à 379