Как удалить триггер sql
Перейти к содержимому

Как удалить триггер sql

  • автор:

Как удалить триггер sql

В момент удаления записи (команда DELETE) срабатывает триггер удаления. Так же он сработает и при удалении записи клиентом на основе ADO или других технологий доступа к БД. Можно создавать триггер и только на удаление.

CREATE TRIGGER DELETE_CAR ON dbo.allcar FOR DELETE AS

Он будет отображаться специальным значком.

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

CREATE TRIGGER DELETE_CAR ON dbo.allcar FOR DELETE AS SELECT * FROM deleted

Давайте запретим удалять автомобили с типом 2, то есть легковые.

CREATE TRIGGER DELETE_CAR ON dbo.allcar FOR DELETE AS IF (SELECT COUNT(*) FROM deleted WHERE deleted.type=2)>0 BEGIN ROLLBACK TRANSACTION END

Мы здесь написали, если количество удаляемых записей в таблицу deleted с типом 2 больше чем 0 (то есть они есть, то надо запретить удаление). Вот тут нас ждут интересные веши. Например, если клиент ACCESS, то он удаляет запись и больше ее не показывает в таблице.

Но стоит сделать любую операцию, которая обновляет записи, например, сортировку, как она тут же появляется снова.

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

Удаление или отключение триггеров DML

В этом разделе описывается удаление или отключение триггера DML в SQL Server с помощью SQL Server Management Studio или Transact-SQL.

В этом разделе

  • Перед началом: РекомендацииБезопасность
  • Для удаления или отключения триггера DML используется:Среда SQL Server Management StudioTransact-SQL

Перед началом

Рекомендации

  • После удаления триггер удаляется из текущей базы данных. Это не повлияет на таблицу и данные, на которых он основан. При удалении таблицы автоматически удаляются все триггеры в ней.
  • По умолчанию при создании триггер включается.
  • Отключение триггера не сбрасывает его. Триггер все еще существует как объект в текущей базе данных. Впрочем, триггер в инструкциях INSERT, UPDATE или DELETE не сработает при выполнении любой из них. Отключенные триггеры можно повторно включать. При включении триггера он не создается повторно. Он срабатывает так же, как после создания.

Безопасность

Разрешения

Чтобы удалить триггер DML, необходимо разрешение ALTER для таблицы или представления, в которых определен данный триггер.

Для отключения или включения триггера DML пользователь должен обладать как минимум разрешением ALTER для таблицы или представления, где создан триггер.

Использование среды SQL Server Management Studio

Удаление триггера DML
  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД, а затем разверните этот экземпляр.
  2. Разверните нужную базу данных, разверните узел Таблицы, а затем разверните таблицу, которая содержит удаляемый триггер.
  3. Разверните узел Триггеры, щелкните правой кнопкой мыши нужный триггер и выберите команду Удалить.
  4. В диалоговом окне Удаление объекта проверьте триггер и нажмите кнопку ОК.
Отключение и включение триггера DML
  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД, а затем разверните этот экземпляр.
  2. Разверните нужную базу данных, разверните узел Таблицы, а затем разверните таблицу, которая содержит отключаемый триггер.
  3. Разверните узел Триггеры, щелкните правой кнопкой мыши нужный триггер и выберите команду Отключить.
  4. Чтобы включить триггер, выберите команду Включить.

Использование Transact-SQL

Удаление триггера DML
  1. Соединитесь с ядром СУБД .
  2. На панели «Стандартная» нажмите Создать запрос.
  3. Скопируйте и вставьте следующие примеры в окно запроса. Выполните инструкцию CREATE TRIGGER , чтобы создать триггер Sales.bonus_reminder . Чтобы удалить триггер, выполните инструкцию DROP TRIGGER .
--Create the trigger. USE AdventureWorks2022; GO IF OBJECT_ID(N'Sales.bonus_reminder', N'TR') IS NOT NULL DROP TRIGGER Sales.bonus_reminder; GO CREATE TRIGGER Sales.bonus_reminder ON Sales.SalesPersonQuotaHistory WITH ENCRYPTION AFTER INSERT, UPDATE AS RAISERROR ('Notify Compensation', 16, 10); GO 
--Delete the trigger. USE AdventureWorks2022; GO IF OBJECT_ID ('Sales.bonus_reminder', 'TR') IS NOT NULL DROP TRIGGER Sales.bonus_reminder; GO 
Отключение и включение триггера DML
  1. Соединитесь с ядром СУБД .
  2. На панели «Стандартная» нажмите Создать запрос.
  3. Скопируйте и вставьте следующие примеры в окно запроса. Выполните инструкцию CREATE TRIGGER , чтобы создать триггер Sales.bonus_reminder . Чтобы отключить или включить триггер, выполните соответственно инструкцию DISABLE TRIGGER или ENABLE TRIGGER .
--Create the trigger. USE AdventureWorks2022; GO IF OBJECT_ID(N'Sales.bonus_reminder', N'TR') IS NOT NULL DROP TRIGGER Sales.bonus_reminder; GO CREATE TRIGGER Sales.bonus_reminder ON Sales.SalesPersonQuotaHistory WITH ENCRYPTION AFTER INSERT, UPDATE AS RAISERROR ('Notify Compensation', 16, 10); GO 
--Disable the trigger. USE AdventureWorks2022; GO DISABLE TRIGGER Sales.bonus_reminder ON Sales.SalesPersonQuotaHistory; GO 
--Enable the trigger. USE AdventureWorks2022; GO ENABLE TRIGGER Sales.bonus_reminder ON Sales.SalesPersonQuotaHistory; GO 

УДАЛИТЬ ТРИГГЕР

После того как вы создали триггер в Oracle, вам может понадобиться удалить его из базы данных. Вы можете сделать это с помощью команды DROP TRIGGER.

Синтаксис

DROP TRIGGER имя_триггера;

Параметры и аргументы

имя_триггера наименование триггера, который вы хотите удалить.

Примечание

  • Смотрите также: как создать триггеры AFTER DELETE, AFTER INSERT, AFTER UPDATE, BEFORE DELETE, BEFORE INSERT, и BEFORE UPDATE.

Пример

DROP TRIGGER orders_before_insert;

Этот пример показывает как удалить триггер orders_before_insert с помощью команды DROP TRIGGER.

Как отключить триггер в sql

Для отключения триггера в SQL необходимо использовать оператор ALTER TRIGGER . Вот пример, как это сделать:

ALTER TRIGGER имя_триггера DISABLE; 

Здесь имя_триггера — это имя триггера, который вы хотите отключить. Команда DISABLE используется для отключения триггера.

Вы также можете использовать команду ENABLE , чтобы снова включить триггер:

ALTER TRIGGER имя_триггера ENABLE; 

Эта команда включает ранее отключенный триггер.

Обратите внимание, что для отключения или включения триггера вам может потребоваться соответствующее разрешение в базе данных.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *