В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф(номер INT PRIMARY KEY, --номер работы нач_соб INT, --начальное событие кон_соб INT, --конечное событие длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное. Например:
Номер | Нач_соб | Кон_соб | Длит |
---|---|---|---|
12345678910 | 1113432556 | 2434556677 | 51236285472 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1". Разработать триггер для удаления работы, причем при попытке удаления единственной работы, выходящей из данного начального события, отменить удаление, заменив в удаляемой работе конечное событие на сток (т.е. на конечное событие с максимальным номером).
CREATE TRIGGER trig_delON Граф INSTEAD OF DELETEAS
Выберите операторы для продолжения текста триггера.
DECLARE @e INT,@n INT, @m INTSELECT @n=номер, @e=нач_соб FROM deletedSELECT @m=MAX(кон_соб) FROM Граф IF NOT EXISTS(SELECT * FROM Граф WHERE номер<>@n AND нач_соб=@e ) UPDATE Граф SET кон_соб=@m WHERE номер=@nELSE DELETE FROM Граф WHERE номер=@n
DECLARE @e INT,@n INT, @m INTSELECT @n=номер, @e=нач_соб FROM deletedSELECT @m=MAX(кон_соб) FROM Граф WHERE номер<>@nIF NOT EXISTS(SELECT * FROM Граф WHERE номер<>@n AND нач_соб=@e ) UPDATE Граф SET кон_соб=@m WHERE нач_соб=@eELSE DELETE FROM Граф WHERE нач_соб=@e
DECLARE @e INT,@n INT, @m INTSELECT @n=номер, @e=нач_соб FROM deletedSELECT @m=MAX(кон_соб) FROM Граф WHERE номер<>@nIF NOT EXISTS(SELECT * FROM Граф WHERE номер<>@n AND нач_соб=@e ) UPDATE Граф SET кон_соб=@m WHERE номер=@nELSE DELETE FROM Граф WHERE номер=@n(Верный ответ)
DECLARE @e INT,@n INT, @m INTSELECT @n=номер, @e=нач_соб FROM deletedSELECT @m=MAX(кон_соб) FROM Граф WHERE номер<>@nIF NOT EXISTS(SELECT * FROM Граф WHERE нач_соб=@e ) UPDATE Граф SET кон_соб=@m WHERE номер=@nELSE DELETE FROM Граф WHERE номер=@n