Введение
Триггеры — это мощная функция Microsoft SQL Server, позволяющая автоматически выполнять заданное действие, когда определенное событие происходит в определенной таблице или представлении. Они особенно полезны для обеспечения соблюдения бизнес-правил, поддержания целостности данных и аудита изменений данных. В этой статье мы рассмотрим различные типы триггеров, способы их создания и управления ими, а также продемонстрируем несколько практических примеров.
Типы триггеров
В SQL Server существует три основных типа триггеров:
- Триггеры DDL. Эти триггеры срабатывают в ответ на события языка определения данных (DDL), такие как операторы CREATE, ALTER или DROP.
- Триггеры DML: эти триггеры срабатывают в ответ на события языка манипулирования данными (DML), такие как операторы INSERT, UPDATE или DELETE.
- Триггеры входа в систему: эти триггеры срабатывают в ответ на событие LOGON, позволяя вам контролировать и управлять входом пользователей в систему.
Создание триггеров
Чтобы создать триггер, вы используете оператор CREATE TRIGGER, за которым следует имя триггера, событие триггера и действие, которое необходимо выполнить. Вот простой пример триггера DML, который регистрирует все удаленные записи в таблице аудита:
CREATE TRIGGER trg_AfterDelete ON Employees AFTER DELETE AS BEGIN INSERT INTO EmployeeAudit SELECT *, GETDATE() AS DeleteDate FROM deleted; END;
В этом примере триггер trg_AfterDelete создается в таблице «Сотрудники» и срабатывает после события DELETE. Когда триггер срабатывает, он вставляет удаленные записи в таблицу EmployeeAudit вместе с текущей датой и временем.
Изменение триггеров
Чтобы изменить триггер, вы используете оператор ALTER TRIGGER, за которым следует имя триггера и новое действие для выполнения. Например, вы можете обновить триггер trg_AfterDelete, чтобы он также регистрировал события UPDATE:
ALTER TRIGGER trg_AfterDelete ON Employees AFTER DELETE, UPDATE AS BEGIN IF EXISTS (SELECT * FROM deleted) BEGIN INSERT INTO EmployeeAudit SELECT *, GETDATE() AS ActionDate, 'DELETE' AS ActionType FROM deleted; END IF EXISTS (SELECT * FROM inserted) BEGIN INSERT INTO EmployeeAudit SELECT *, GETDATE() AS ActionDate, 'UPDATE' AS ActionType FROM inserted; END END;
Отключение и включение триггеров
Вы можете временно отключить триггер с помощью оператора DISABLE TRIGGER:
DISABLE TRIGGER trg_AfterDelete ON Employees;
Чтобы снова включить триггер, используйте оператор ENABLE TRIGGER:
ENABLE TRIGGER trg_AfterDelete ON Employees;
Заключение
Триггеры в Microsoft SQL Server предоставляют мощный способ обеспечения целостности данных, поддержки бизнес-правил и аудита изменений данных. Понимание того, как создавать, изменять и управлять триггерами, поможет вам создавать надежные и безопасные приложения. По мере дальнейшего изучения триггеров помните об их потенциальном влиянии на производительность и разумно выбирайте, когда и где их применять.