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

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

Технический Университет

Лабораторная работа по курсу БД.

№ 9

Страна: Россия

Выполнил студент группы

А-13-07

Корольков Алексей

3 декабря

Проверила: Сидорова Наталья Петровна

2010

Задание:

  1. Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Год приема» (значения от ‘00’ до ‘99’), «Год окончания» (значения от ‘00’ до ‘99’), «Код категории обучения» (значения от ’01’ до ‘17’), «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД;

  2. Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.

select poss.gp as gp into gpr from poss

select poss.gok as gok into gokt from poss

select kat_obuch.cod as kat into codkat from kat_obuch

select family.cod as sem_polog into codsem from family

select * into vuz_gorod1 from vuz_gorod

select * into vuz1 from vuz

create trigger zadan_1 on poss2

for insert as

if (select count(*) from gpr, inserted

where gpr.gp=inserted.gp) = 0

select 'значение поля gp не принадлежит домену'

if (select count(*) from gokt, inserted

where gokt.gok=inserted.gok) = 0

select 'значение поля gok не принадлежит домену'

if (select count(*) from codkat, inserted

where codkat.kat=inserted.kat_obuch_k) = 0

select 'значение поля kat_obuch не принадлежит домену'

if (select count(*) from codsem, inserted

where codsem.sem_polog=inserted.sem_polog_k) = 0

select 'значение поля sem_polog не принадлежит домену'

drop trigger zadan2_1

create trigger zadan2_1 on vuz_gorod1

for insert as

if @@rowcount = 0

return

insert into vuz1 select cod_vuza, nazvanie_vuza

from inserted as i_1

where cod_vuza not in (select cod from vuz1)

if @@error != 0

begin

raiserror('Insert error!', 16,1)

rollback tran

return

end

return

create trigger zadan2_2 on vuz_gorod1

for update as

if @@rowcount = 0

begin

update v

set v.cod = i_1.cod_vuza, v.uch_zavedenie = i_1.nazvanie_vuza

from deleted d, vuz1 v, inserted i_1

where ((d.cod_vuza = v.cod)

or (d.nazvanie_vuza = v.uch_zavedenie))

end

if @@error != 0

begin

raiserror('Update error!', 16,1)

rollback tran

return

end

return

create trigger zadan2_3 on vuz_gorod1

for delete as

if @@rowcount = 0

return

delete vuz1

from deleted d, vuz1 v

where d.cod_vuza = v.cod

if @@error != 0

begin

raiserror('Delete error!', 16,1)

rollback tran

return

end

return

insert poss2 values

(265579,'ТРОЙНОВ СТЕПАН ГРИГОРЬЕВИЧ ','240270','М',

'5','001702','05',0419569,'09','89','03','93')

go

insert vuz_gorod1 values

(0172341,'МЭИ ','123','НЕВИННОМЫССК ','01',

'РОССИЯ ')

delete from vuz_gorod1 where cod_vuza = 0172341

select * from vuz_gorod1

create trigger [dbo].[zadan2] on [dbo].[family]

for delete as

if @@rowcount = 0

return

update poss2 set sem_polog_k = Null

from deleted d, poss2 f

where d.cod = f.sem_polog_k

if @@error != 0

begin

raiserror('Delete error!', 16,1)

rollback tran

return

end

return