Отключить триггер для одного оператора вставки - PullRequest
1 голос
/ 28 марта 2012

У меня есть триггер AFTER INSERT, который отлично работает для вставок в одну строку, но плохо работает с оператором INSERT SELECT, который вставляет> 10000 строк /

Возможно ли отключить триггер на уровне оператора, например, дляодин оператор INSERT SELECT?

Ответы [ 3 ]

2 голосов
/ 28 марта 2012
DISABLE TRIGGER dbo.MyTrigger ON dbo.MyTable

EXEC MyGeographyStoredProcedure

ENABLE TRIGGER dbo.MyTrigger ON dbo.MyTable

или

DISABLE TRIGGER dbo.MyTrigger ON dbo.MyTable

INSERT LudicrousNumberofRows FROM BigDataset

ENABLE TRIGGER dbo.MyTrigger ON dbo.MyTable
1 голос
/ 28 марта 2012

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

в начале триггера выполните:

IF EXISTS (SELECT top 2 COUNT(1) FROM INSERTED HAVING COUNT(1)>1)
BEGIN
    --possibly insert into some other "work needs to be done table"
    --where you have a running job pull this info and work on it
    --so this trigger doesn't need to do it, you just delay the work
    --and let the job do it.
    RETURN --exit the trigger without doing any of the "slow processing"
END
0 голосов
/ 28 марта 2012

другой вариант:

ALTER TABLE tablename DISABLE TRIGGER ALL 
-- do work here 
ALTER TABLE tablename ENABLE TRIGGER ALL

используйте его, если у вас есть только один триггер или что отключить все триггеры в таблице:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...