Конфликт операторов вставки SQL Management Studio - PullRequest
0 голосов
/ 29 октября 2010

Я работаю над созданием базы данных разработки для моего босса. У меня есть сценарий SQL, который создает все таблицы, но теперь у меня есть множество данных для импорта. Всего в базе 5 таблиц, и их идентификаторы связаны друг с другом следующим образом:

Примечание: я не могу делиться информацией, такой как имена баз / таблиц

Table1
+-- Table2
    +-- Table3
        +-- Table4
            +-- Table5

Это означает, что Table 5 имеет поле, которое указывает на идентификатор Table 4 и т. Д.

Так что я делаю кучу вставок, как это:

INSERT INTO [dbo].[Table2] (Table1_ID, AnotherField) VALUES (159268, 408659)

Но он выдает это исключение для каждого:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_TABLE2_TABLE1". The conflict occurred in database "--removed by author--", table "dbo.TABLE1", column 'TABLE1_ID'.

EDIT: Таким образом, проблема заключалась в том, что мне сначала нужно было вставить данные в таблицу. Итак, мой босс нашел некоторые данные, которые будут достаточны для Table1 ... Итак, проблема решена:)

Ответы [ 3 ]

1 голос
/ 29 октября 2010

Добавлять особо нечего - сообщение об ошибке довольно ясное.

Вы пытаетесь вставить значение идентификатора в Table2, однако этого значения ID в Table1 не существует.Отсюда и сообщение об ошибке.

Вам необходимо вставить данные в Таблицу1, прежде чем вставлять в Таблицу2

РЕДАКТИРОВАТЬ:

Если для Таблицы 1 нет данныхтогда ограничения базы данных плохо продуманы.Вам нужно будет удалить ограничение из таблицы 2.

Затем вам нужно будет запросить данные для таблицы 1.

0 голосов
/ 29 октября 2010

Вы можете временно отключить ограничение внешнего ключа, выполнить вставку, а затем снова включить его, используя CHECK и NOCHECK.

WITH NOCHECK CONSTRAINT отключает ограничение и разрешает вставку, которая обычнонарушить ограничение.

WITH CHECK CONSTRAINT повторно включает ограничение.

Вот подробное объяснение того, как это сделать.

0 голосов
/ 29 октября 2010
  1. Вы должны выполнить импорт сверху вниз: сначала импортируйте все записи из Table1, затем Table2 и т. Д.
  2. Или, чтобы упростить процесс и ускорить работу, вы можете отключить все свои ограничения перед выполнением и повторно включить их после завершения. Пожалуйста, посмотрите здесь: Как временно отключить ограничения внешнего ключа с помощью T-SQL?

EDIT:

Что ж, если у вас нет данных Table1, все, что вы можете сделать, это удалить все ограничения внешнего ключа, которые ссылаются на Table1 (возможно, из Table2). Или вы можете попытаться сгенерировать «поддельные» данные Table1, учитывая все различные Table1 идентификаторы, доступные на Table2 (aaarrgh).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...