Триггеры - хороший способ гарантировать, что любые изменения зарегистрированы, так как они почти всегда будут срабатывать независимо от того, как выполняются обновления - например, специальные соединения, а также соединения приложений.
Как подсказывает @mwigdahl, представления управления системой выглядят как хороший способ для захвата текущего запущенного пакета. Является ли это особенно полезным для входа в триггер, это другое дело.
Недостатком использования триггеров является то, что вы можете определить источник обновления только из соединения с базой данных. Многие приложения не имеют никакой пользовательской информации, связанной с соединением, чтобы упростить пул соединений, поэтому вы не знаете, какой пользователь выполняет действие. т. е. имя входа, используемое соединением, является общим именем пользователя приложения, а не лицом, использующим приложение. Обычный способ обойти это - использовать хранимые процедуры в качестве интерфейса для всех взаимодействий с базой данных, а затем убедиться, что UserId передается со всеми вызовами процедур. Затем вы можете выполнить регистрацию через хранимую процедуру вместо триггера. Очевидно, что это полезно только в том случае, если вы знаете, что люди не будут обновлять таблицы напрямую, не используя процедуры, или вам не нужно регистрировать эту ситуацию.
Возможность получить выполняемый в данный момент пакет может обеспечить еще лучший механизм: если вы убедитесь, что все ваши sql-пакеты содержат UserId, вы можете извлечь его из sql в вашем триггере. Это позволило бы вам вести всю регистрацию с помощью триггеров, что означает, что вы захватываете все, но также позволяет связывать изменения с конкретным пользователем.
Если вы идете по маршруту триггера, стоит проверить, что триггеры ситуаций не срабатывают (может быть, загружаются объемные данные? Или если у людей есть разрешение на отключение триггеров).
Также учтите, что @idstam указал, что код триггера будет находиться в вашей транзакции, поэтому обычно регистрируется и откатывается вместе с ним.
Еще одна вещь, которую следует учитывать при написании триггеров, это поведение @@ IDENTITY : если у вас есть процедуры, использующие @@ IDENTITY, вы можете случайно изменить их поведение.