Лабораторные работы (2011) / Бочаров, Кобец / Лабораторная работа 9
.docxНациональный Исследовательский Университет
Московский Энергетический Институт
Кафедра Прикладной Математики
Лабораторная работа №9
Использование триггеров для поддержания целостности
Выполнили: Бочаров Иван
Кобец Сергей
А-13-08
Преподаватель: Сидорова Н.П.
Москва 2011г.
Задание 1
Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Год приема» (значения от ‘00’ до ‘99’), «Год окончания» (значения от ‘00’ до ‘99’), «Код категории обучения» (значения от ’01’ до ‘17’), «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД
Код триггера:
create trigger kat_family_gok_gp_main on bel
for insert as
if (select count(*) from fam_dom, inserted
where fam_dom.fam_cod=inserted.sem_polog_k)=0
begin
select ‘значение поля sem_polog_k не принадлежит домену'
end
if (select count(*) from kat_obuch_dom, inserted
where kat_obuch_dom.kat_cod=inserted.kat_obuch_k)=0
begin
select ‘значение поля kat_obuch_k не принадлежит домену'
end
if (select count(*) from gokdom, inserted
where gokdom.cod_gok=inserted.gok)=0
begin
select ‘значение поля gok не принадлежит домену'
end
if (select count(*) from gpdom, inserted
where gpdom.cod_gp=inserted.gp)=0
begin
select ‘значение поля gp не принадлежит домену'
end
Создание таблиц:
Проверка работы триггера:
Задание 2
Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.
Триггер для INSERT:
create trigger vuz_insert on vuz_gorod
for insert as
declare @vuz_k int
declare @vuz_name char(20)
select @vuz_name = nazvanie_vuza,
@vuz_k = cod_vuza
from inserted
insert vuz values(@vuz_k,@vuz_name)
Проверим работу триггера для INSERT:
Извлечем данные из таблицы vuz:
Триггер на DELETE
create trigger delete_trigger on vuz_gorod
for delete as
delete from vuz
where vuz.cod in (select deleted.cod_vuza from deleted)
Удалим запись о КАДИ
Проверим, отработал ли триггер:
Триггер на UPDATE:
create trigger update_trigger on vuz_gorod
for update as
if UPDATE(cod_vuza)
begin
update vuz
set cod = inserted.cod_vuza
from inserted,deleted,vuz
where cod=deleted.cod_vuza
end
if UPDATE(nazvanie_vuza)
begin
update vuz
set uch_zavedenie = inserted.nazvanie_vuza
from inserted,deleted,vuz
where cod=deleted.cod_vuza
Выполним запрос:
Проверим: