Убедитесь, что таблицы не удаляются из базы данных

#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 транзакции, поэтому вы можете откатить ее.

Лучшим способом было бы удалить разрешения, чтобы пользователи не могли удалять объекты в первую очередь. С правами на удаление объектов также предоставляется право на удаление триггеров (обычно)