Удаление записи из рекурсивной структуры

ALTER TRIGGER emp_delON emp_mgrFOR DELETEASDECLARE @e CHAR(2), @m CHAR(2), @r INTSELECT @e=emp,@m=mgr,@r=NoOfReports FROM deletedIF @m IS NOT NULL-- удаляется сотрудник, не являющийся директором BEGIN IF @r=0-- удаляется сотрудник, у которого нет подчиненных-- уменьшается число подчиненных у начальника-- удаляемого сотрудника UPDATE emp_mgr SET NoOfReports= NoOfReports-1 WHERE emp=@m ELSE BEGIN-- удаляется сотрудник, у которого есть подчиненные-- переподчиним его подчиненных его начальнику,-- т.е. начальником подчиненных удаляемого сотрудника-- становится его начальник UPDATE emp_mgr SET NoOfReports= NoOfReports+@r-1 WHERE emp=@m UPDATE emp_mgr SET mgr=@m WHERE mgr=@e END END ELSE-- Правило 4 IF EXISTS(SELECT * FROM emp_mgr) BEGIN ROLLBACK TRAN RAISERROR('НЕЛЬЗЯ УДАЛЯТЬ ДИРЕКТОРА',16,10) RETURN END

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

Попытка удаления записи о директоре будет отвергнута сервером:

DELETE FROM emp_mgr WHERE emp='a'Server: Msg 50000, Level 16, State 10, Procedure emp_del, Line 24НЕЛЬЗЯ УДАЛЯТЬ ДИРЕКТОРА

В результате удаления рядового сотрудника с именем b его подчиненные e, f и g станут подчиненными сотрудника с именем a.

DELETE FROM emp_mgr WHERE emp='b'

Первоначальное содержимое таблицы emp_mgr изменится следующим образом:

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

 

Лекция: Транзакции и блокировки

 








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


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

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

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

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