Триггеры SQL.ppt
- Количество слайдов: 19
Триггеры SQL
Команда создания триггеров CREATE TRIGGER
Триггеры
Временные таблицы Команды INSERT DELETE UPDATE Таблицы inserted deleted
Создание триггера для формирования первичного ключа при занесении нового студента CREATE TRIGGER INS_NEW ON STUDENTS INSTEAD OF INSERT AS DECLARE @NOM INT, @FAM CHAR(20), @NAM CHAR(20), @OTC CHAR(20), @STIP DECIMAL(5, 2) SELECT @NOM=MAX(SNUM) FROM STUDENTS SELECT @FAM=INS. SFAM, @NAM=INS. SNAM, @OTC=INS. SOTCH, @STIP= INS. STIP FROM INSERTED INSERT INTO STUDENTS VALUES (@NOM+1, @FAM, @NAM, @OTC, @STIP)
САМОСТОЯТЕЛЬНО Создать триггер для ввода первичного ключа в таблицу TEACHERS
САМОСТОЯТЕЛЬНО CREATE TRIGGER INS_TEA ON TEACHERS INSTEAD OF INSERT AS DECLARE @NOM INT, @FAM CHAR(20), @NAM CHAR(20), @OTC CHAR(20) SELECT @NOM=MAX(TNUM) FROM TEACHERS SELECT @FAM=INS. TFAM, @NAM=INS. TNAM, @OTC=INS. TOTCH FROM INSERTED INSERT INTO TEACHERS VALUES (@NOM+1, @FAM, @NAM, @OTCH)
Создание триггера для поддержания ссылочной целостности при удалении студентов CREATE TRIGGER ST_DEL ON STUDENTS INSTEAD OF DELETE AS DECLARE @NUM INT SELECT @NUM=DEL. SNUM FROM DELETED DEL IF EXISTS (SELECT * FROM USP WHERE SNUM=@NUM) DELETE FROM USP WHERE SNUM=@NUM DELETE FROM STUDENTS WHERE SNUM=@NUM
САМОСТОЯТЕЛЬНО Создать триггер для NULL удаления первичного ключа из таблицы TEACHERS
САМОСТОЯТЕЛЬНО CREATE TRIGGER ST_DEL ON TEACHERS INSTEAD OF DELETE AS DECLARE @NUM INT SELECT @NUM=DEL. TNUM FROM DELETED DEL IF EXISTS (SELECT * FROM PREDMET WHERE TNUM=@NUM) UPDATE PREDMET TNUM=NULL WHERE TNUM=@NUM DELETE FROM TEACHERS WHERE TNUM=@NUM
Создание триггера для поддержания ссылочной целостности при добавлении нового студента CREATE TRIGGER INS_S ON STUDENTS FOR INSERT AS DECLARE @K_M INT, @K_S INT SELECT @K_M=MAX(UNUM) FROM USP SELECT @K_S =INS. SNUM FROM INSERTED INSERT INTO USP (UNUM, SNUM) VALUES (@K_M+1, @K_S)
САМОСТОЯТЕЛЬНО Создать триггер для поддержания ссылочной целостности при добавлении нового преподавателя в таблицу TEACHERS
САМОСТОЯТЕЛЬНО CREATE TRIGGER INS_S ON TEACHERS FOR INSERT AS DECLARE @K_T INT, @K_P INT SELECT @K_P=MAX(PNUM) FROM PREDMER SELECT @K_T =INS. TNUM FROM INSERTED INSERT INTO PREDMET (PNUM, TNUM) VALUES (@K_P+1, @K_T)
Создание триггера для проверки правильности изменения поля CREATE TRIGGER Upd_Oc ON USP FOR UPDATE AS DECLARE @OC INT, @NOM INT IF UPDATE (OCENKA) BEGIN SELECT @OC=OCENKA, @NOM=UNUM FROM USP IF (@OC>1) AND(@OC<6) UPDATE USP SET OCENKA=@OC WHERE UNUM=@NOM ELSE UPDATE USP SET OCENKA=NULL WHERE UNUM=@NOM END
САМОСТОЯТЕЛЬНО Создать триггер для изменения поля TNUM в таблице PREDMET, с проверкой наличия преподавателя с новым номером в таблице TEACHERS, в противном случае TNUM должен быть равен NULL.
САМОСТОЯТЕЛЬНО CREATE TRIGGER Upd_Tea ON predmet FOR UPDATE AS DECLARE @TNUM INT, @NOM INT IF UPDATE (TNUM) BEGIN SELECT @TNUM=TNUM, @NOM=PNUM FROM PREDMET IF EXISTS (SELECT * FROM TEACHERS WHERE TNUM=@TNUM) UPDATE PREDMET SET TNUM=@TNUM WHERE PNUM=@NOM ELSE UPDATE PREDMET SET TNUM=NULL WHERE PNUM=@NOM END
Создание триггера для ведения статистики успеваемости студентов. *** требуется использование функции CONVERT CREATE TRIGGER OC_DAY ON USP FOR INSERT AS IF EXISTS (SELECT * FROM STAT WHERE DAT=GETDATE()) UPDATE STAT SET KOL_VO=KOL_VO+1 WHERE DAT=GETDATE() ELSE INSERT INTO STAT VALUES(1, GETDATE())
САМОСТОЯТЕЛЬНО Создать триггер для подсчета количества предметов на каждом курсе. Результат занести в таблицу STAT_P(kol, cours)
САМОСТОЯТЕЛЬНО CREATE TRIGGER INS_P ON PREDMET FOR INSERT AS DECLARE @K_K INT SELECT @K_K =INS. COURS FROM INSERTED INS IF EXISTS (SELECT * FROM STAT_P WHERE COURS=@K_K) UPDATE STAT SET KOL=KOL+1 WHERE COURS=@K_K ELSE INSERT INTO STAT VALUES(1, @K_K )
FOR [INSERT] [, UPDATE] [, DELETE]| INSTEAD OF[INSERT] [UPDATE] [DELETE] AS [DECLARE <переменные>]