---- Работа - FOR INSERT, UPDATE ----
  -- при выставлении значения поля Код_работы_владельца проверяется, что такой код есть в таблице и что это не вызовет цикла
  -- при выставлении значения поля Код_объекта проверяется, что данная работа может присуствовать у объекта данного типа
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[OnWorkUpdate]') and xtype = N'TR')
drop trigger [dbo].[OnWorkUpdate]
GO

CREATE TRIGGER OnWorkUpdate ON [dbo].[Работа] 
FOR INSERT, UPDATE
AS
  if UPDATE(Код_работы_владельца)
  begin
    if exists (SELECT 1 FROM inserted WHERE inserted.Код_работы_владельца IS NOT NULL AND inserted.Код_работы_владельца NOT IN (SELECT Код_работы FROM Работа))
    BEGIN
      RAISERROR ('Ошибка при попытке установить Код_работы_владельца (таблица Работа). Несуществующий Код_работы',16,1)
      ROLLBACK TRANSACTION
    END
    if exists (SELECT 1 FROM inserted WHERE dbo.IsSubWork(Код_работы_владельца,Код_работы) = 1)
    begin
      RAISERROR ('Ошибка при попытке установить Код_работы_владельца (таблица Работа). Установка значения Код_работы_владельца  вызывает цикл',16,1)
      ROLLBACK TRANSACTION
    end
  end
  if UPDATE(Код_объекта)
    if exists(SELECT 1 FROM inserted Ins
              INNER JOIN Объект ON Объект.Код_объекта = Ins.Код_объекта
              WHERE Объект.Код_типа_объекта NOT IN 
                (SELECT Код_типа_объекта FROM Справочник_видов_работ СВР WHERE СВР.Код_вида_работы = Ins.Код_вида_работы))
    begin
      RAISERROR ('Ошибка при попытке установить Код_объекта (таблица Работа). Неправильный тип объекта для имеющегося вида работы',16,1)
      ROLLBACK TRANSACTION
    end
  if UPDATE(Код_вида_работы)
    if exists(SELECT 1 FROM inserted Ins
              INNER JOIN Объект ON Объект.Код_объекта = Ins.Код_объекта
              WHERE Объект.Код_типа_объекта NOT IN 
                (SELECT Код_типа_объекта FROM Справочник_видов_работ СВР WHERE СВР.Код_вида_работы = Ins.Код_вида_работы))
    begin
      RAISERROR ('Ошибка при попытке установить Код_вида_работы (таблица Работа). Неправильный вид работы для имеющегося объекта',16,1)
      ROLLBACK TRANSACTION
    end
