Лабораторные работы (А-13-07) / Ахремцев, Стрельцов / lab9
.docxЛабораторная работа № 9.
Триггеры.
Выполнили:
Ахремцев Я.В. Стрельцов А.А.
Проверила:
Сидорова Н.П.
Задание 1.
Заполняем таблицу:
declare @i integer;
set @i = 1;
while (@i <= 99)
begin
insert into gp_dop values(@i)
set @i = @i + 1
end;
Триггер:
create trigger study_trig on cir
for insert as
if (select count(*) from gp_dop, inserted
where convert(char(2), gp_dop.gp) = inserted.gp) = 0
select 'значение поле gp не пренадлежит заданному диапазону’
Запрос:
insert into cir (nomer, fio, gp) values(123123123, 'asdasasd','00')
Результат:
Задание 2.
Разработать триггер, который срабатывает при выполнении любого из трех операторов: update, delete, insert в таблице vuz_gorod, с целью коррекции таблицы vuz.
-
Триггер для insert
create trigger vuz_gorod_insert on vuz_gorod
for insert as
declare @cod VARCHAR(50), @uch_zav VARCHAR(50)
SET @cod = (select cod_vuza from inserted)
SET @uch_zav = (select nazvanie_vuza from inserted)
insert into vuz (cod, uch_zavedenie) values (@cod, @uch_zav)
Пример работы:
insert vuz_gorod values (12895225, 'ВУЗ2', 08911, 'asd', 01, 'РОССИЯ')
select * from vuz where vuz.uch_zavedenie = 'ВУЗ2'
-
Триггер для delete
create trigger vuz_gorod_delete on vuz_gorod
for delete as
declare @cod VARCHAR(50), @uch_zav VARCHAR(50)
SET @cod = (select cod_vuza from deleteed)
SET @uch_zav = (select nazvanie_vuza from deleteed)
delete from vuz where vuz.cod = @cod and vuz.uch_zavedenie = @uch_zav
Пример работы:
delete from vuz where vuz.uch_zavedenie = 'ВУЗ2'
select * from vuz where vuz.uch_zavedenie = 'ВУЗ2'
-
Триггер для update
create trigger vuz_gorod_update on vuz_gorod
for update as
declare @cod_ins VARCHAR(50), @uch_zav_ins VARCHAR(50),
@cod_del VARCHAR(50), @uch_zav_del VARCHAR(50)
SET @cod_ins = (select cod_vuza from inserted)
SET @uch_zav_ins = (select nazvanie_vuza from inserted)
SET @cod_del = (select cod_vuza from deleted)
SET @uch_zav_del = (select nazvanie_vuza from deleted)
update vuz
SET
vuz.cod = @cod_ins,
vuz.uch_zavedenie = @uch_zav_ins
where
vuz.cod = @cod_del and vuz.uch_zavedenie = @uch_zav_del
update vuz_gorod
set
cod_vuza = 12910511,
nazvanie_vuza = 'changed'
where
vuz_gorod.cod_vuza = 129105