2013-02-06 3 views
2

Предположим, у меня есть таблица MyTab в базе данных. У меня есть триггер, например, триггер удаления в этой таблице. Затем в хранимой процедуре я пытаюсь удалить данные из этой таблицы, но хочу остановить триггер удаления только для этого удаления. После этого снова включите спусковой крючок. Можно ли иметь коды в хранимой процедуре, как:Как остановить/запустить триггер в хранимой процедуре динамически?

stop trigger on MyTab; 
delete from MyTab where ...; 
put the trigger back; 

ответ

3

Как уже упоминалось here, вы можете отключить и включить триггер, хотя я бы, вероятно, поставить это в примерки улова и/или сделки, так что вы не» t застрять с отключенным триггером из-за ошибки.

Например:

set xact_abort on; -- Auto-rollback on any error 
begin transaction; 

    alter table MyTab disable trigger TR_MyTab_Delete; 

    delete from MyTab where 1/0 = 1; -- Causes div by zero error 

    alter table MyTab enable trigger TR_MyTab_Delete; -- Won't run becuase of above error 

commit; 

Сценарий выше выдаст ошибку, но не оставит триггер отключен, поскольку set xact_abort on гарантирует, что мой откат транзакции, в том числе отключение триггера.

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