
Триггеры
Три́ггер (trigger) — это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено наступлением определенного события (действием) — по сути добавлением INSERT или удалением DELETE строки в заданной таблице, или модификации UPDATE данных в определенном столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.
Триггеры создаются отдельно для каждой таблицы и располагаются в обозревателе объектов в папке «Triggers». Создадим триггеры для таблицы «teachers». Папка «Triggers» будет входить в состав таблицы «teachers»:
Создадим триггер, выводящий сообщение «Запись добавлена» при добавлении записи в таблицу. Создадим новый триггер, щёлкнув ПКМ по папке «Triggers» в таблице «teachers» и в появившемся меню выбрав пункт «New Trigger». Появится следующее окно с новым триггером:
Рассмотрим структуру триггеров:
1) Область определения имени функции (Trigger_Name);
2) Область, показывающая для какой таблицы создаётся триггер (Table_Name);
3) Область, показывающая когда выполнять триггер (INSERT – при создании записи в таблице, DELETE – при удалении и UPDATE – при изменении) и как его выполнять (ALTER – после выполнения операции, INSTEAD OF – вместо выполнения операции);
4) Тело триггера, содержит команды языка программирования запросов TSQL.
В окне нового триггера наберем код:
CREATE TRIGGER tr_add
ON dbo.teachers
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
PRINT 'Новая запись добавлена'
END
GO
Из
рисунка видно, что создаваемый триггер
«Индикатор добавления» выполняется
после добавления записи (AFTER INSERT) в
таблицу «dbo.teachers»
(ON dbo.teachers).
После добавления записи триггер выведет
на экран сообщение 'Новая
запись добавлена'
(PRINT
'Новая
запись добавлена').
Выполним набранный код, нажав кнопку
на панели инструментов. В нижней части
окна с кодом появиться сообщение
«Command(s) completed successfully.».
Проверим, как работает новый триггер. Создадимновый пустой запрос и в нём наберем следующую команду для добавления новой записи в таблицу «dbo.teachers»:
insert into dbo.teachers
Values (
'190015',
'Сидоров'
)
Выполним
набранную команду, нажав кнопку
на панели инструментов. В таблицу будет
добавлена новая запись, и триггер выведет
сообщение «Новая запись добавлена»
Аналогичным образом создаются триггеры с UPDATE и DELETE.
Задание: в соответствии со своей темой создайте в SQL Server Management Studio представления (3-4), запросы(3-4), хранимые процедуры(3-4), пользовательские функции(3-4), триггеры (INSERT, UPDATE и DELETE). Используйте при создании операторы условия и циклы.