Триггеры
Три́ггер (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). Используйте при создании операторы условия и циклы.