ALTER TRIGGER emp_del ON emp_mgr FOR DELETE AS DECLARE @e CHAR(2), @m CHAR(2), @r INT SELECT @e=emp,@m=mgr,@r=NoOfReports FROM deleted IF @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