#sql
#sql
Вопрос:
Мне нужно убедиться, что таблицы не удаляются из моей базы данных. Должен ли я .. Создать триггер DDL (или DML?), Который содержит ФИКСАЦИЮ, или создать триггер DDL (или DML?), Который содержит ОТКАТ?
Ответ №1:
Предполагая, что SQL Server есть пример выполнения этого в BOL
CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT 'You must disable Trigger "safety" to drop or alter tables!'
ROLLBACK
;
Однако вам было бы лучше удалить разрешения у любого, кто может DROP
использовать таблицы ненадлежащим образом. Триггеры DDL выполняются после триггеров, а не вместо триггеров, поэтому оператор drop table может по-прежнему вызывать проблемы, даже если в конечном итоге будет выполнен откат.
Комментарии:
1. Это триггер DML или DDL?? (извините, если это основной вопрос) Я думаю, DDL
2. @vaibhav — Да DDL. Вы не сможете сделать это с помощью триггера DML.
Ответ №2:
Для ОТКАТА можно использовать триггер DDL. DDL сам по себе является транзакцией, триггером является pasrt транзакции, поэтому вы можете откатить ее.
Лучшим способом было бы удалить разрешения, чтобы пользователи не могли удалять объекты в первую очередь. С правами на удаление объектов также предоставляется право на удаление триггеров (обычно)