Лабораторная работа № 7
Организация бизнес-логики ИС на стороне сервера
Триггеры.
Создадим 3 триггера, на различные события (добавление, изменение, удаление):
CREATE TRIGGER JournalINS ON [dbo].[ispolnenie]
FOR INSERT AS
IF @@ROWCOUNT=1
BEGIN
INSERT INTO journal Values ('Добавление',CURRENT_TIMESTAMP,CURRENT_USER)
END
CREATE TRIGGER JournalUP ON [dbo].[ispolnenie]
FOR UPDATE AS
IF @@ROWCOUNT=1
BEGIN
INSERT INTO journal Values ('Изменение',CURRENT_TIMESTAMP,CURRENT_USER)
END
CREATE TRIGGER JournalDEL ON [dbo].[ispolnenie]
FOR DELETE AS
IF @@ROWCOUNT=1
BEGIN
INSERT INTO journal Values ('Удаление',CURRENT_TIMESTAMP,CURRENT_USER)
END
Запросы для триггеров:
INSERT INTO [IT52_Tash].[dbo].[ispolnenie]([id_person],[id_style],[id_alb])
VALUES(5,2,3)
UPDATE [IT52_Tash].[dbo].[ispolnenie]
SET id_style=7
WHERE id_play=12
DELETE FROM [IT52_Tash].[dbo].[ispolnenie]
WHERE id_play=12
Таблица journal с отчетами об изменениях:
Триггер, проверяющий введённые значения произведения, исполнителя или стиля на наличие их в соответствующих таблицах
CREATE TRIGGER checkINS
ON [dbo].[ispolnenie] FOR INSERT AS
IF @@ROWCOUNT=1
BEGIN
IF NOT EXISTS(SELECT * FROM inserted
WHERE (inserted.id_person in (SELECT id_play FROM person) AND inserted.id_style in (SELECT id_play FROM style) AND inserted.id_alb in (SELECT id_play FROM album) ))
BEGIN
ROLLBACK TRAN
PRINT 'Ошибка!!'
END
END
Результат запроса:
Триггер, проверяющий изменяемые значения произведения, исполнителя или стиля на наличие их в соответствующих таблицах
CREATE TRIGGER checkUpDate
ON [dbo].[ispolnenie] FOR UPDATE AS
IF @@ROWCOUNT=1
BEGIN
IF NOT EXISTS(SELECT * FROM inserted
WHERE (inserted.id_person in (SELECT id_play FROM person) AND inserted.id_style in (SELECT id_play FROM style) AND inserted.id_alb in (SELECT id_play FROM album) ))
BEGIN
ROLLBACK TRAN
PRINT 'Данные невозможно изменить!!'
END
END
Результат запроса:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.