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…
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:
ALTER TRIGGER trTstTrigger ON TstTrigger
FOR INSERT, UPDATE, DELETE
AS
IF CONTEXT_INFO() = 0X111
RETURN
PRINT 'EXECUTOU A TRIGGER!!'
GOAgora, antes de executar o insert, precisamos usar o CONTEXT_INFO:
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!!!