2009-11-11 5 views
1

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

ответ

2

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

DISABLE TRIGGER trg ON tbl; 

затем

ENABLE TRIGGER trg ON tbl; 

для продолжительности процедуры.

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

0

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

1

Альтернативный метод - использовать 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, контекст info установлено в значение. В триггере мы сначала проверяем, совпадает ли значение контекстной информации с объявленным значением. Если да, триггер просто вернется без выполнения его кода, иначе срабатывает триггер.

Источник: http://www.mssqltips.com/tip.asp?tip=1591

Смежные вопросы