Эта страница (поиск RECURSIVE_TRIGGERS
) описывает некоторые настройки базы данных, которые можно использовать для изменения этого поведения. Кроме того, одним из способов защиты ваших процедур является использование либо функции UPDATE()
, либо функции COLUMNS_UPDATED()
.
Если, например, у вас есть таблица со столбцами A
, B
и C
, и вы хотите, чтобы значение C
автоматически изменялось при обновлении значения в столбце B
, Вы можете защитить вызов в триггере:
CREATE TRIGGER Whatever ON TableName AFTER UPDATE
AS
BEGIN
IF UPDATE(B)
BEGIN
/* Update column C here */
END
END
Таким образом, вы избегаете рекурсивного вызова триггера, когда столбец C
обновляется вашим триггером. COLUMNS_UPDATED()
также полезно, но я нахожу его хрупким (зависит от положения столбца, а не от имени столбца).