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

Триггеры DDL, как и обычные триггеры, вызывают срабатывание хранимых процедур в ответ на событие. Однако в отличие от триггеров DML они не срабатывают в ответ на инструкции UPDATE, INSERT или DELETE для таблицы или представления. Вместо этого они срабатывают в ответ на разнообразные события языка определения данных (DDL). Эти события в основном соответствуют инструкциям языка Transact-SQL, начинающимся ключевыми словами CREATE, ALTER или DROP. Системные хранимые процедуры, выполняющие операции, подобные операциям DDL, также могут запускать триггеры DDL.

Важное примечаниеВажно!

Протестируйте триггеры DDL, чтобы определить, как они отвечают на запущенные системные хранимые процедуры. Например, как инструкция CREATE TYPE, так и хранимая процедура sp_addtype вызывают срабатывание триггера DDL, созданного на событии CREATE_TYPE. .

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

Используйте триггеры DDL, если хотите сделать следующее.

  • Предотвратить внесение определенных изменений в схему базы данных.

  • Выполнить в базе данных некоторые действия в ответ на изменения в схеме базы данных.

  • Записывать изменения или события схемы базы данных.

Триггеры DDL срабатывают только после выполнения соответствующих инструкций DDL. Триггеры DDL нельзя использовать в качестве триггеров INSTEAD OF.

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

CREATE TRIGGER safety 
ON DATABASE 
FOR DROP_TABLE, ALTER_TABLE 
AS 
   PRINT 'You must disable Trigger "safety" to drop or alter tables!' 
   ROLLBACK ;

Триггеры DLL могут срабатывать в ответ на событие языка Transact-SQL, обрабатываемое в текущей базе данных или на текущем сервере. Область действия триггера зависит от события. Дополнительные сведения об области действия триггеров DDL см. в разделе Проектирование триггеров DDL.

Для получения примера триггера DDL, имеющегося в образце базы данных База данных AdventureWorks2008R2, в обозревателе объектов в среде Среда SQL Server Management Studio откройте папку «Триггеры базы данных», расположенную в папке «Возможность программирования» образца базы данных База данных AdventureWorks2008R2. Щелкните правой кнопкой мыши элемент ddlDatabaseTriggerLog и выберите команду Создать сценарий для триггера базы данных. По умолчанию триггер DDL ddlDatabaseTriggerLog отключен.