For drop_table, alter_table

Решение

Триггер – это набор инструкций SQL Server, который выглядит и действует подобно хранимой процедуре, но триггер нельзя вызвать с помощью команды EXEC. Триггеры активизируются при выполнении пользователем определенной инструкции Transact-SQL. Существует два вида триггеров :

- DML запускаются с помощью инструкций INSERT, UPDATE или DELETE.

- DDLс помощью инструкций CREATE, ALTER, DROP.

Если вы не хотите, чтобы триггеру передавались записи, нужно добавить команду ROLLBACK в соответствующее место в коде. Команда ROLLBACK указывает серверу остановить обработку модификации и запретить транзакцию.

Существует также команда RAISEERROR с помощью которой вы можете отправить сообщение об ошибке пользователю.

Триггеры INSERT

Триггеры INSERTзапускаются при каждой попытке создать новую запись в таблице с помощью команды INSERT. При попытке вставить новую запись в таблицу SQLServerкопирует эту запись в таблицу триггеров БД и специальную таблицу inserted.

пример: допустим у нас есть таблица «Sotrydnik» БД “Ludi”. Необходимо запретить вставлять запись о сотруднике оклад которого, менее 20000 рублей.

1. Открыть SQL Server Management Studio. В окне Object Explorer развернутьпапкуБД «Ludi” - Programmability – Triggers.

2. Щелкаем правой кнопкой мыши на папке Triggersи выбираем команду NewTriggers.

3. В нашем случае триггер будет выглядеть следующим образом:

CREATE TRIGGER primer1

ON sotrydnik

AFTER INSERT

AS

BEGIN

SET NOCOUNT ON;

if (select oklad from inserted)<'20000'

Rollback

print'Вы не можете вставлять запись о сотруднике с окладом менее 20 000 рублей'

END

GO

4. Выполняем триггер, нажав на кнопку на панели инструментов. В результате в нижней части экрана мы увидим строчку «Command(s) completedsuccessfully».

5. Далее сохраняем триггер, щелкнув по кнопке Save

Чтобы протестировать новый триггер, необходимо создать запрос, нажав на кнопку New Query , следующего содержания

USE LUDI

INSERT SOTRYDNIK

VALUES (‘S28’,’Петров’,’Валерий’,’Михайлович’,’10000’,’2’,’1’)

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

Итак, я создал триггер, который при вставке новой записи, проверяет вводимый оклад.

Триггеры DDL.

Триггеры DDL применются для инструкций CREATE, ALTER, DROP и т.д.

пример: создадим триггер, который предотвратит удаление или изменение таблиц в БД.

1. Создадим запрос, нажав на кнопку New Query , следующего содержания:

USE LUDI

GO

CREATE TRIGGER CANTDROPSOTRYDNIK

ON DATABASE

FOR DROP_TABLE, ALTER_TABLE

AS

PRINT ‘Вы не можете удалять или изменять БД’

ROLLBACK

2. Проверим созданный триггер. Создадим запрос, нажав на кнопку New Query ,

следующего содержания:

DROP_TABLES SOTRYDNIK

3. Вы увидите сообщение об ошибке:

Вы не можете удалять или изменять БД

Вывод: рассмотрел основные виды триггеров, которые повышают производительность БД и «облегчают жизнь программистам»

Наши рекомендации