Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не могу вставить запись  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
Здравствуйте. Не могу вставить запись в свою БД. Сейчас она пустая. Хочу вставить запись в родительскую таблицу Отделы, а ругается, что не создана дочерняя таблица Сотрудники. Схему генерировал из ERWIN. Помогите, пожалуйста.
Картинка с другого сайта.
Картинка с другого сайта.

К сообщению приложен файл. Размер - 127Kb
7 май 16, 12:48    [19145385]     Ответить | Цитировать Сообщить модератору
 Re: Не могу вставить запись  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
Смотрите, какая логика в триггере на таблице...
7 май 16, 14:56    [19145655]     Ответить | Цитировать Сообщить модератору
 Re: Не могу вставить запись  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
Knyazev Alexey,
Триггеры я не созадвал. А как можно это посмотреть?
7 май 16, 15:27    [19145708]     Ответить | Цитировать Сообщить модератору
 Re: Не могу вставить запись  [new]
iljy
Member

Откуда:
Сообщений: 8711
IgorGalimski
Knyazev Alexey,
Триггеры я не созадвал. А как можно это посмотреть?


В дереве раскрыть объект соответствующей таблицы и там все увидите.
7 май 16, 15:34    [19145719]     Ответить | Цитировать Сообщить модератору
 Re: Не могу вставить запись  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
Кажется я нашёл триггер, который не даёт вставить. Но я не могу понять, что в нём происходит. Знаний в этой области совсем нет, к сожалению.
USE [kurs]
GO
/****** Object:  Trigger [dbo].[tI_Отделы]    Script Date: 05/07/2016 20:24:58 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER TRIGGER [dbo].[tI_Отделы] ON [dbo].[Отделы] FOR INSERT AS
/* ERwin Builtin 2 мая 2016 г. 14:56:39 */
/* INSERT trigger on Отделы */
BEGIN
	DECLARE @NUMROWS int,
           @nullcnt int,
           @validcnt int,
           @errno   int,
           @errmsg  varchar(255)

  SELECT @NUMROWS = @@rowcount
    /* ERwin Builtin 2 мая 2016 г. 14:56:39 */
    /* Отделы работают Сотрудники on parent insert no action */
    /* ERWIN_RELATION:CHECKSUM="00011701", PARENT_OWNER="", PARENT_TABLE="Отделы"
    CHILD_OWNER="", CHILD_TABLE="Сотрудники"
    P2C_VERB_PHRASE="работают", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="работают", FK_COLUMNS="id_Отдела" */
    IF EXISTS (SELECT * FROM inserted
      WHERE NOT EXISTS (
          SELECT * FROM Сотрудники
          WHERE
            /* %JoinFKPK(Сотрудники,inserted," = "," AND") */
            Сотрудники.id_Отдела = inserted.id_Отдела
      )
    )
    BEGIN
      SELECT @errno  = 30011,
             @errmsg = 'Cannot insert Отделы because Сотрудники does not.'
      GOTO ERROR
    END


  /* ERwin Builtin 2 мая 2016 г. 14:56:39 */
  RETURN
ERROR:
    raiserror @errno @errmsg
    rollback transaction
END
7 май 16, 20:29    [19146453]     Ответить | Цитировать Сообщить модератору
 Re: Не могу вставить запись  [new]
invm
Member

Откуда: Москва
Сообщений: 9396
1. Настройте ERWIN чтобы он генерировал поддержку ссылочной целостности ограничениями foreign key, а не триггерами.
2. Таблица "Отделы" должна быть родительской, "Сотрудники" - дочерней. А у вас наоборот.
7 май 16, 20:33    [19146472]     Ответить | Цитировать Сообщить модератору
 Re: Не могу вставить запись  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
invm,
От нас требуют ссылочную целостность через настройки связи, как на рисунке. А вроде Сотрудники дочерняя, возле неё кружок стоит.Картинка с другого сайта.
7 май 16, 21:21    [19146594]     Ответить | Цитировать Сообщить модератору
 Re: Не могу вставить запись  [new]
invm
Member

Откуда: Москва
Сообщений: 9396
IgorGalimski
От нас требуют ссылочную целостность через настройки связи, как на рисунке.
Как "рисунок" будет отображен на физическую модель - в виде триггера или FK - зависит от настроек, а не от наличия/отсутствия "рисунка". Впрочем, для ваших целей это несущественно.
IgorGalimski
А вроде Сотрудники дочерняя, возле неё кружок стоит
Я не знаю что означает кружок. Зато я вижу триггер, в котором дочерняя - "Отделы".
Наименование связи "Отделы работают Сотрудники" как бы тоже намекает.
7 май 16, 22:03    [19146709]     Ответить | Цитировать Сообщить модератору
 Re: Не могу вставить запись  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
Проблема была в том, что в ссылочной целостности было выставлено Parent Instert - No action. Поменял на NONE - и мне разрешает вставить. Хотя почему не работало с No action я так и не понял
12 май 16, 14:16    [19163795]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить