Основные сведения о DML-триггерах

Microsoft SQL Server предоставляет два механизма для реализации бизнес-правил и обеспечения целостности данных: ограничения и триггеры. Триггер — это хранимая процедура особого типа, выполняемая автоматически при возникновении языкового события. SQL Server поддерживает три основных типа триггеров: триггеры DML, триггеры DDL и триггеры входа.

Триггеры DDL выполняются, когда на сервере или в базе данных возникает событие языка определения данных (DDL). Более подробно они описаны в разделе DDL-триггеры. Триггеры входа вызывают срабатывание хранимых процедур в ответ на событие LOGON. Это событие вызывается при установке пользовательского сеанса с экземпляром SQL Server. Дополнительные сведения см. в разделе Триггеры входа.

DML-триггеры выполняются при возникновении событий языка обработки данных (DDL) в базе данных. DML-события возникают при выполнении инструкций INSERT, UPDATE или DELETE, изменяющих данные в указанной таблице или представлении. DML-триггеры могут обращаться к другим таблицам и содержать сложные инструкции Transact-SQL. Триггер и инструкция, при выполнении которой он срабатывает, считаются одной транзакцией, которую можно откатить назад внутри триггера. При обнаружении серьезной ошибки (например, нехватки пространства на диске) вся транзакция автоматически откатывается назад.

DML-триггеры удобно использовать в следующих случаях:

  • Для каскадных изменений в связанных таблицах базы данных; однако эти изменения можно более эффективно выполнить при помощи каскадных ограничений ссылочной целостности.

  • Для предотвращения случайных или неправильных операций INSERT, UPDATE и DELETE и реализации других более сложных ограничений, чем те, которые определены при помощи ограничения CHECK.

    В отличие от ограничений CHECK, DML-триггеры могут ссылаться на столбцы других таблиц. Например, триггер может использовать инструкцию SELECT для сравнения вставленных или обновленных данных и выполнения других действий, например изменения данных или отображения пользовательского сообщения об ошибке.

  • Чтобы оценить состояние таблицы до и после изменения данных и предпринять действия на основе этого различия.

  • Несколько DML-триггеров одинакового типа (INSERT, UPDATE или DELETE) для таблицы позволяют предпринять несколько различных действий в ответ на одну инструкцию изменения данных.