В 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