SQL Server: приостановить триггер - PullRequest
1 голос
/ 11 ноября 2009

Я работаю с SQL Server 2005, и у меня есть триггер для таблицы, которая будет копировать удаления в другую таблицу. Я не могу полностью удалить этот триггер. Моя проблема в том, что сейчас мы разработали стратегию архивирования для этой таблицы. Мне нужен способ "приостановки" триггера, когда выполняется хранимый процесс, который выполняет архивирование.

Ответы [ 3 ]

2 голосов
/ 11 ноября 2009

Немного больше информации было бы полезно о том, как процедура обращается к данным, но если вы только получаете данные, затем удаляете их из таблицы и хотите отключить триггер для этого процесса, вы можете сделать следующее

DISABLE TRIGGER trg ON tbl;

тогда

ENABLE TRIGGER trg ON tbl;

на время процедуры.

Это работает только для SQL 2005 +

1 голос
/ 23 ноября 2009

Альтернативный метод - использовать 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

0 голосов
/ 11 ноября 2009

, если DISABLE TRIGGER/ENABLE TRIGGER по какой-либо причине не является опцией, вы можете создать таблицу с одной строкой, которая будет служить флагом для триггера.

...