Альтернативный метод - использовать Context_Info, чтобы отключить его для одного сеанса, в то же время позволяя другим сеансам продолжать запускать триггер.
Context_Info
- это переменная, которая принадлежит сеансу. Его значение можно изменить с помощью SET Context_Info
.
Триггер в основном будет выглядеть так:
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
Если вы хотите предотвратить запуск триггера, вы можете сделать следующее:
SET Context_Info 0x55555
INSERT dbo.Table1 VALUES(100)
Перед выполнением оператора INSERT контекстной информации присваивается значение. В триггере мы сначала проверяем, совпадает ли значение контекстной информации с объявленным значением. Если да, триггер просто вернется без выполнения своего кода, в противном случае триггер сработает.
источник: http://www.mssqltips.com/tip.asp?tip=1591