Изменение записи в рекурсивной структуре

CREATE TRIGGER emp_upd ON emp_mgrFOR UPDATEASIF UPDATE(mgr)BEGIN--Правило 5DECLARE @x CHAR(2), @y CHAR(2), @xx CHAR(2)SELECT @xx=inserted.emp FROM insertedSELECT @x=@xxSELECT @y='*'WHILE @y IS NOT NULL BEGIN SELECT @y=mgr FROM emp_mgr WHERE emp=@x IF @xx=@y BEGIN RAISERROR('транзитивное замыкание',16,10) ROLLBACK TRAN RETURN END ELSE SELECT @x=@y ENDEND--Правило 2IF EXISTS (SELECT * FROM inserted WHERE mgr=emp)BEGIN ROLLBACK TRAN RAISERROR('САМ СЕБЕ НАЧАЛЬНИК',16,10) RETURNEND--Правило 4IF EXISTS (SELECT * FROM inserted WHERE mgr IS NULL) AND EXISTS (SELECT * FROM emp_mgr,inserted WHERE emp_mgr.mgr IS NULL AND emp_mgr.emp<>inserted.emp)BEGIN ROLLBACK TRAN RAISERROR('ОДИН ДИРЕКТОР УЖЕ ЕСТЬ',16,10) RETURNEND--Правило 3IF UPDATE(mgr) IF NOT EXISTS(SELECT * FROM emp_mgr, inserted WHERE emp_mgr.emp=inserted.mgr OR inserted.mgr IS NULL)BEGIN RAISERROR('НЕТ ТАКОГО НАЧАЛЬНИКА',16,10) ROLLBACK TRAN RETURNENDIF UPDATE(mgr)--пересчет числа подчиненных у старого и нового--начальниковBEGIN UPDATE emp_mgr SET emp_mgr.NoOfReports=emp_mgr.NoOfReports+1 FROM inserted WHERE emp_mgr.emp=inserted.mgr UPDATE emp_mgr SET emp_mgr.NoOfReports=emp_mgr.NoOfReports-1 FROM deleted WHERE emp_mgr.emp=deleted.mgrENDIF UPDATE(emp)--если изменилось имя сотрудника, следует изменить--имя начальника у всех его подчиненныхUPDATE emp_mgr SET emp_mgr.mgr=inserted.empFROM emp_mgr, inserted, deleted WHEREemp_mgr.mgr=deleted.emp

Пример 15.2. Триггер для изменения записи в таблице. (html, txt)

Попытка подчинить сотрудника с именем ‘b’ начальнику с именем ‘e’ будет сервером отвергнута, иначе в организации сложилась бы такая ситуация: сотрудник ‘e’ подчинятся сотруднику ‘b’, а сотрудник ‘b’ подчиняется сотруднику ‘e’.

UPDATE emp_mgr SET mgr='e' WHERE emp='b'Server: Msg 50000, Level 16, State 10, Procedure emp_upd, Line 15 транзитивное замыкание

Выполнение команды

UPDATE emp_mgr SET mgr='f' WHERE emp='e'

и команды

UPDATE emp_mgr SET mgr='a' WHERE emp='g'

приведет к следующему изменению первоначальной иерархической структуры:

emp mgr NoOfReports-------------------------a NULL 4b a 1c a 1d a 1e f 0f b 1g a 0i c 0k d 0







Дата добавления: 2015-08-26; просмотров: 848;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.