Olá pessoal!
Gostaria hoje de dar uma dica para quem precisa executar aquele INSERT / UPDATE / DELETE sem disparar a trigger para a tabela… E sem precisar desabilitá-la!
Observação: Você vai precisar alterar a trigger para que funcione, disso você não ter como escapar.
Vamos criar uma tabela e a trigger e fazer uns testes…
1 2 3 4 5 6 7 8 9 |
CREATE TABLE TstTrigger (a int identity) GO CREATE TRIGGER trTstTrigger ON TstTrigger FOR INSERT, UPDATE, DELETE AS PRINT 'EXECUTOU A TRIGGER!!' GO INSERT INTO TstTrigger DEFAULT VALUES GO |
Trigger sendo executada, vamos para a parte legal!
Para o que precisamos, vamos usar aqui o CONTEXT_INFO e a função correspondente.
Como vai funcionar:
Primeiro, vamos alterar a trigger:
1 2 3 4 5 6 7 |
ALTER TRIGGER trTstTrigger ON TstTrigger FOR INSERT, UPDATE, DELETE AS IF CONTEXT_INFO() = 0X111 RETURN PRINT 'EXECUTOU A TRIGGER!!' GO |
Agora, antes de executar o insert, precisamos usar o CONTEXT_INFO:
1 2 |
SET CONTEXT_INFO 0x111 INSERT INTO TstTrigger DEFAULT VALUES |
E agora, ao executar o insert, a trigger é “ignorada” (ok, nós sabemos que ela foi executada… Mas você entendeu a jogada) 🙂
E você, tem algum outro jeito de evitar que uma trigger seja executada, sem precisar desabilitá-la? Fala aí e vamos agregar mais conteúdo!!
Fonte:
- https://docs.microsoft.com/en-us/sql/t-sql/statements/set-context-info-transact-sql
- https://docs.microsoft.com/en-us/sql/t-sql/functions/context-info-transact-sql
Até mais!!!