Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы (2011) / Бочаров, Кобец / Лабораторная работа 9

.docx
Скачиваний:
54
Добавлен:
28.06.2014
Размер:
975.02 Кб
Скачать

Национальный Исследовательский Университет

Московский Энергетический Институт

Кафедра Прикладной Математики

Лабораторная работа №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

Выполним запрос:

Проверим: