Оператор INSERT конфликтует с ограничением FOREIGN KEY - SQL Server - PullRequest
198 голосов
/ 03 июня 2010

Я получаю следующую ошибку. Не могли бы вы помочь мне?

Сообщение 547, Уровень 16, Состояние 0, Строка 1
Оператор INSERT конфликтует с ограничением FOREIGN KEY "FK_Sup_Item_Sup_Item_Cat". Конфликт произошел в базе данных "dev_bo", таблица "dbo.Sup_Item_Cat". Заявление было прекращено.

Код:

insert into sup_item (supplier_id, sup_item_id, name, sup_item_cat_id, 
                      status_code, last_modified_user_id, last_modified_timestamp, client_id)   
values (10162425, 10, 'jaiso', '123123',
        'a', '12', '2010-12-12', '1062425')

Последний столбец client_id вызывает ошибку. Я попытался поместить значение, которое уже существует в dbo.Sup_Item_Cat, в столбец, соответствующий sup_item .. но без радости: - (

Ответы [ 13 ]

250 голосов
/ 03 июня 2010

В вашей таблице dbo.Sup_Item_Cat есть ссылка внешнего ключа на другую таблицу. Способ работы FK заключается в том, что в этом столбце не может быть значения, которого нет также в столбце первичного ключа ссылочной таблицы.

Если у вас есть SQL Server Management Studio, откройте его и sp_help 'dbo.Sup_Item_Cat'. Посмотрите, к какому столбцу относится этот FK, и на какой столбец какой таблицы он ссылается. Вы вставляете плохие данные.

Дайте мне знать, если вам нужно что-то объяснить лучше!

117 голосов
/ 18 января 2014

Я сам столкнулся с этой проблемой, связанной с сообщением об ошибке, полученным при заполнении поля внешнего ключа. Я попал на эту страницу в надежде найти ответ. Проверенный ответ на этой странице действительно правильный, к сожалению, я чувствую, что ответ немного неполон для людей, не знакомых с SQL. Я довольно хорошо умею писать код, но запросы SQL для меня новы, как и создание таблиц базы данных.

Несмотря на то, что проверенный ответ был правильным:

Майк М написал -

"FK работает так, что у него не может быть значения в этом столбце, который не также в столбце первичного ключа ссылочной таблицы. "

Чего не хватает в этом ответе просто;

Сначала необходимо создать таблицу, содержащую первичный ключ.

Еще один способ сказать, что это так;

Вы должны вставить данные в родительскую таблицу, содержащую основной Ключ, прежде чем пытаться вставить данные в дочернюю таблицу, содержащую Внешний ключ.

Короче говоря, многие учебные пособия, похоже, не соответствуют этому факту, так что если вы попробуете самостоятельно и не поймете, что существует порядок операций, вы получите эту ошибку. Естественно, после добавления данных первичного ключа ваши данные внешнего ключа в дочерней таблице должны соответствовать полю первичного ключа в родительской таблице, в противном случае вы все равно получите эту ошибку.

Если кто-нибудь прочитает это далеко. Я надеюсь, что это помогло сделать проверенный ответ более ясным. Я знаю, что некоторые из вас могут чувствовать, что подобные вещи довольно просты и что открытие книги ответило бы на этот вопрос до того, как она была опубликована, но правда в том, что не все учатся одинаково. *

19 голосов
/ 03 июня 2010

Вы пытаетесь вставить запись со значением в столбце внешнего ключа, которого нет в таблице внешнего ключа.

Например: если у вас есть таблицы «Книги» и «Авторы», в которых «Книги» имеют ограничение внешнего ключа для таблицы «Авторы», и вы пытаетесь вставить запись книги, для которой нет записи об авторе.

14 голосов
/ 03 июня 2010

Вам нужно будет опубликовать свое заявление для получения дополнительных разъяснений. Но ...

Эта ошибка означает, что таблица, в которую вы вставляете данные, имеет отношение внешнего ключа с другой таблицей. Прежде чем данные могут быть вставлены, значение в поле внешнего ключа должно сначала существовать в другой таблице .

5 голосов
/ 31 мая 2014

Я обнаружил, что все поля должны точно соответствовать.

Например, отправка 'cat dog' - это не то же самое, что отправка 'catdog'.

Чтобы устранить эту проблему, я написал сценарий FK-кода из таблицы, в которую я вставлял данные, запомнил «Внешний ключ» с ограничениями (в моем случае их было 2) и убедился, что эти 2 значения полей соответствуют ТОЧНО, как они были в таблице, которая выдавала ошибку ограничения FK.

Как только я исправил 2 поля, в которых были проблемы, жизнь стала хорошей!

Если вам нужно лучшее объяснение, дайте мне знать.

5 голосов
/ 03 июня 2010

Проблема не в client_id, как я вижу. Похоже, проблема в 4-м столбце sup_item_cat_id

Я бы побежал

sp_helpconstraint sup_item

и обратите внимание на столбец constraint_keys, возвращаемый для внешнего ключа FK_Sup_Item_Sup_Item_Cat, чтобы подтвердить, какой столбец является актуальной проблемой, но я уверен, что это не тот, который вы пытаетесь исправить. Кроме того, «123123» также выглядит подозрительно.

3 голосов
/ 03 июня 2010

Это означает именно то, что говорится. Вы пытаетесь вставить значение в столбец с ограничением FK, которое не соответствует ни одному из значений в таблице поиска.

2 голосов
/ 05 марта 2015

Отсутствие данных родительской таблицы вызывает проблему. В вашей проблеме отсутствие данных в "dbo.Sup_Item_Cat" вызывает проблему

2 голосов
/ 12 апреля 2014
  1. запустить sp_helpconstraint
  2. обратите ВНИМАНИЕ на столбец constraint_keys, возвращаемый для внешнего ключа
2 голосов
/ 06 января 2014

Дважды проверьте поля в отношении, для которого определен внешний ключ. В SQL Server Management Studio, возможно, не было полей, которые вы хотели выбрать при определении отношения. Это сожгло меня в прошлом.

...