В SQL Server 2005 есть ли способ для триггера выяснить, какой объект отвечает за срабатывание триггера? Я хотел бы использовать это для отключения триггера для одной сохраненной процедуры.
Есть ли другой способ отключить триггер только для текущей транзакции? Я мог бы использовать следующий код, но если я не ошибаюсь, это также повлияет на параллельные транзакции - что было бы плохо.
DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL } ON { object_name | DATABASE | ALL SERVER } [ ; ]
ENABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL } ON { object_name | DATABASE | ALL SERVER } [ ; ]
Если возможно, я бы хотел избежать использования метода «NoTrigger» в моей таблице и выполнения NoTrigger = null
, потому что я хотел бы, чтобы таблица была как можно меньше.
Причина, по которой я хотел бы избежать триггера, состоит в том, что он содержит логику, которая важна для ручного обновления таблицы, но моя хранимая процедура позаботится об этой логике. Поскольку это будет очень используемая процедура, я хочу, чтобы она была быстрой.
Триггеры накладывают дополнительные накладные расходы на сервер, поскольку они инициируют неявную транзакцию. Как только триггер выполнен, запускается новая неявная транзакция, и любой поиск данных в транзакции будет блокировать уязвимые таблицы.
От: http://searchsqlserver.techtarget.com/tip/1,289483,sid87_gci1170220,00.html#trigger