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!!'
GO

Agora, 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:

Até mais!!!