Как вы расставляете приоритеты для нескольких триггеров таблицы? - PullRequest
5 голосов
/ 18 сентября 2008

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

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

Ответы [ 4 ]

6 голосов
/ 18 сентября 2008

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

sp_settriggerorder на MSDN

Из приведенной выше ссылки:
A. Установка порядка срабатывания для триггера DML
В следующем примере показано, что триггер uSalesOrderHeader будет первым триггером, сработавшим после выполнения операции UPDATE в таблице 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';
1 голос
/ 18 сентября 2008

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

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

1 голос
/ 18 сентября 2008

См. здесь .

0 голосов
/ 18 сентября 2008

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

...