Как вы определяете приоритетность нескольких триггеров таблицы?

StackOverflow https://stackoverflow.com/questions/94959

Вопрос

У меня есть пара триггеров на столе, которые я хочу сохранить отдельный и хотел бы расставить их по приоритетам.

Я мог бы иметь только один триггер и выполнять логику там, но мне было интересно, есть ли более простой / логичный способ выполнить это, расположив его в заранее определенном порядке?

Это было полезно?

Решение

Используйте sp_settriggerorder.Вы можете указать первый и последний срабатывающий триггер в зависимости от операции.

sp_settriggerorder в MSDN

По приведенной выше ссылке:
A.Установка порядка срабатывания триггера DML
В следующем примере указано, что триггер uSalesOrderHeader будет первым триггером, который сработает после выполнения операции ОБНОВЛЕНИЯ в таблице Sales.Таблица SalesOrderHeader.

USE AdventureWorks;
GO
sp_settriggerorder 
    @triggername= 'Sales.uSalesOrderHeader', 
    @order='First', 
    @stmttype = 'UPDATE';

B.Установка порядка срабатывания триггера DDL
В следующем примере указано, что триггер ddlDatabaseTriggerLog будет первым триггером, срабатывающим после возникновения события ALTER_TABLE в базе данных AdventureWorks.

USE AdventureWorks;
GO
sp_settriggerorder 
    @triggername= 'ddlDatabaseTriggerLog', 
    @order='First', 
    @stmttype = 'ALTER_TABLE', 
    @namespace = 'DATABASE';

Другие советы

Видишь здесь.

Вы можете использовать sp_settriggerorderпорядок чтобы определить порядок каждого триггера в таблице.

Тем не менее, я бы сказал, что вам было бы намного лучше иметь один триггер, который выполняет несколько действий.Это особенно итак, если порядок важен, поскольку эта важность будет не очень очевидна, если у вас есть несколько триггеров.Представьте, что кто-то пытается поддерживать базу данных месяцами / годами позже.Конечно, вероятно, будут случаи, когда вам нужно иметь несколько триггеров или это действительно лучший дизайн, но я бы начал предполагать, что у вас должен быть один и работать оттуда.

Помните, что если вы измените порядок запуска, кто-то другой может прийти позже и изменить его снова.И где бы вы задокументировали, каким должен быть порядок запуска, чтобы разработчик технического обслуживания знал, что не следует нарушать порядок, иначе что-то сломается?Если две задачи запуска определенно должны выполняться в определенном порядке, единственный безопасный способ - поместить их в один и тот же триггер.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top