Database Engine дает возможность создавать множество триггеров для каждой таблицы или представления и для каждого действия с ними (insert, update и delete). Дополнительно к этому вы можете задавать порядок для нескольких триггеров, определенных для конкретного действия. Используя системную хранимую процедуру sp_settriggerorder, вы можете указать, что один из триггеров after, связанных с таблицей, будет либо первым триггером after, либо последним выполняемым триггером after для каждого обрабатываемого триггерами действия. Эта системная процедура имеет параметр dorder, который принимает три значения:
♦ first указывает, что данный триггер является первым триггером after, который будет выполняться для модифицирующего действия;
♦ last указывает, что данный триггер является последним триггером after, вызываемым для соответствующего действия;
♦ попе указывает, что для триггера не существует какого-нибудь порядка, в котором он будет выполняться. Это значение обычно используется для отмены ранее установленного для триггера значения first или last.
В примере 14.6 показано использование системной хранимой процедуры sp_settriggerorder.
Для отображения порядка, в котором выполняются триггеры, вы можете использовать следующее:
♦ хранимую процедуру sp_helptrigger;
♦ функцию object property.
Системная процедура spheiptrigger имеет столбец order, который содержит порядковый номер указанного триггера. Используя функцию objectproperty,
вы можете указать либо ExecIsFirstTrigger, либо ExecIsLastTrigger в качестве второго параметра этой функции. Первый параметр всегда является идентификационным номером объекта базы данных. Функция objectproperty отображает 1, если конкретное свойство истинно.