Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Existe uma maneira de desabilitar um gatilho do SQL Server apenas para um escopo específico de execução?


Acabei de ver este artigo recentemente destacado no boletim informativo do SQL Server Central e parece oferecer uma maneira que você pode achar útil usando o Context_Info na conexão:

http://www.mssqltips.com/tip.asp?tip=1591

EDITAR por Terrapin:

O link acima inclui o seguinte código:
USE AdventureWorks;  
GO  
-- creating the table in AdventureWorks database  
IF OBJECT_ID('dbo.Table1') IS NOT NULL  
DROP TABLE dbo.Table1  
GO  
CREATE TABLE dbo.Table1(ID INT)  
GO   
-- Creating a trigger  
CREATE TRIGGER TR_Test ON dbo.Table1 FOR INSERT,UPDATE,DELETE  
AS  
DECLARE @Cinfo VARBINARY(128)  
SELECT @Cinfo = Context_Info()  
IF @Cinfo = 0x55555  
RETURN  
PRINT 'Trigger Executed'  
-- Actual code goes here  
-- For simplicity, I did not include any code  
GO  

Se você quiser impedir que o gatilho seja executado, você pode fazer o seguinte:
SET Context_Info 0x55555 
INSERT dbo.Table1 VALUES(100)