Таблица «Лицензия» имеет два индекса: первичный по коду ЛПУ и
началу действия лицензии; вторичный по регистрационному номеру
лицензии. На таблицу установлены триггеры: один на добавление записи,
другой на корректировку[26.стр.138]:
CREATE TRIGGER TRI_INS_LICEN ON dbo.Licen
FOR INSERT
AS
BEGIN
IF (UPDATE(BEGIN_DATE) OR UPDATE(END_DATE)) AND EXISTS(SELECT * FROM LICEN L
WHERE (L.NUM_LIC IN (SELECT NUM_LIC FROM INSERTED I WHERE I.KOD_LPU=L.KOD_LPU)) AND
EXISTS(SELECT * FROM LICEN L1 WHERE (L1.NUM_LIC<>L.NUM_LIC) AND (L.KOD_LPU=L1.KOD_LPU)
AND (((L.BEGIN_DATE<=L1.BEGIN_DATE) AND (L.END_DATE>=L1.BEGIN_DATE))
OR ((L.BEGIN_DATE>=L1.BEGIN_DATE) AND (L.BEGIN_DATE<=L1.END_DATE)))))
BEGIN
ROLLBACK TRAN
RAISERROR ('ПЕРЕСЕЧЕНИЕ СРОКОВ ЛИЦЕНЗИИ!',11,1) WITH SETERROR
RETURN
END
INSERT INTO
PROF_DEPART(NUM_LIC,KOD_OTD,PROFIL,DAYST,KOL_K,CATEGORY,HOLYDAYS,PAY_PROFIL)
SELECT I.NUM_LIC,S.KOD_OTD,S.PROFIL,S.DAYST,S.KOL_K,S.CATEGORY,S.HOLYDAYS,S.PAY_PROFIL
FROM INSERTED I INNER JOIN LICEN L ON I.KOD_LPU=L.KOD_LPU AND
L.BEGIN_DATE=(SELECT MAX(L1.BEGIN_DATE) FROM LICEN L1 WHERE L1.KOD_LPU=L.KOD_LPU AND
L1.BEGIN_DATE<I.BEGIN_DATE)
INNER JOIN PROF_DEPART S ON L.NUM_LIC=S.NUM_LIC
END
CREATE TRIGGER TRI_UPD_LICEN ON dbo.Licen
FOR UPDATE
AS
BEGIN
IF (UPDATE(BEGIN_DATE) OR UPDATE(END_DATE)) AND EXISTS(SELECT * FROM LICEN L
WHERE (L.NUM_LIC IN (SELECT NUM_LIC FROM INSERTED I WHERE I.KOD_LPU=L.KOD_LPU)) AND
EXISTS(SELECT * FROM LICEN L1 WHERE (L1.NUM_LIC<>L.NUM_LIC) AND (L.KOD_LPU=L1.KOD_LPU)
AND (((L.BEGIN_DATE<=L1.BEGIN_DATE) AND (L.END_DATE>=L1.BEGIN_DATE))
OR ((L.BEGIN_DATE>=L1.BEGIN_DATE) AND (L.BEGIN_DATE<=L1.END_DATE)))))
BEGIN
ROLLBACK TRAN
RAISERROR ('ПЕРЕСЕЧЕНИЕ СРОКОВ ЛИЦЕНЗИИ!',11,1) WITH SETERROR
END
END
Таблица 6
Структура таблицы «Отделения ЛПУ» (DepartLPU)