Триггер – это набор инструкций SQLServer, который выглядит и действует подобно хранимой процедуре, но триггер нельзя вызвать с помощью команды 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
GO4. Выполняем триггер, нажав на кнопку на панели инструментов. В результате в нижней части экрана мы увидим строчку «Command(s) completedsuccessfully».
5. Далее сохраняем триггер, щелкнув по кнопке Save
Чтобы протестировать новый триггер, необходимо создать запрос, нажав на кнопку New Query , следующего содержания