Заява INSERT суперечить обмеженню FOREIGN KEY - SQL Server


225

Я отримую таку помилку. Чи можете ви мені допомогти?

Повідомлення 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 .. але ніякої радості :-(


20
Ви спробували вставити запис у вашу таблицю предметів, яка не містить у вашій Sup_Item_Catтаблиці запису відповідних категорій . Не багато про що сказати про це.
Мартін Сміт

1
Отже, ви говорите, що SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id = '123123'повертає результати?
Мартін Сміт

2
Також ви кажете "останній куум" client_id "я отримую конфлікт". Це не те, що означає повідомлення про помилку. Я думаю, що ви шукаєте в неправильному місці для вашої проблеми.
Мартін Сміт

Відповіді:


287

У вашій таблиці dbo.Sup_Item_Catвін містить посилання на зовнішній ключ до іншої таблиці. Те, як працює FK, це не може мати значення в тому стовпці, який також не знаходиться в стовпці первинного ключа згаданої таблиці.

Якщо у вас є студія управління SQL Server, відкрийте її та sp_help' dbo.Sup_Item_Cat'. Подивіться, на який стовпчик знаходиться FK, а в якому стовпчику якої таблиці посилається. Ви вставляєте погані дані.

Дайте мені знати, якщо вам потрібно щось пояснити краще!


10
Дякуємо, що включили команду sp_help! Допоміг мені звузити мою подібну проблему.
Gaʀʀʏ

Дійсно - у моєму випадку властивість просто не надсилається назад із виду на контролер, тому воно завжди було 0 (що не було дійсним ідентифікатором, але контролер не міг би цього знати)
neminem

1
Alt + F1 - це ярлик для sp_help, для майбутніх читачів виберіть таблицю та натисніть alt + f1
satsvelke

133

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

Незважаючи на те, що перевірена відповідь була правильною:

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

"У тому, як працює FK, це не може мати значення в тому стовпці, який також не знаходиться в стовпці первинного ключа згаданої таблиці."

Чого не вистачає у цій відповіді просто;

Ви повинні спочатку створити таблицю, що містить Первинний ключ.

Ще один спосіб сказати, що це;

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

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

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


І додаю, переконайтеся, що ви профіліруєте свій запит, оскільки він не завжди надсилає те, що, на вашу думку, повинно бути до бази даних.
HLGEM

20

Ви намагаєтеся вставити запис зі значенням у стовпчик іноземного ключа, який не існує в іноземній таблиці.

Наприклад: Якщо у вас є таблиці "Книги та автори", де "Книги" мають обмеження на зовнішній ключ у таблиці "Автори", ви намагаєтесь вставити запис книги, для якого немає запису автора.


16

Вам потрібно буде опублікувати заяву для отримання додаткових роз'яснень. Але ...

Ця помилка означає, що таблиця, в яку ви вставляєте дані, має зв'язок із зовнішнім ключем до іншої таблиці. Перед тим, як дані можна буде вставити, значення в полі іноземного ключа спочатку повинно існувати в іншій таблиці.


5

Проблема не в тому, що client_id є в тому, що я бачу. Схоже, проблема з четвертим стовпцем, sup_item_cat_id

Я біг би

sp_helpconstraint sup_item

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


5

Я щось виявив, що всі поля повинні точно відповідати.

Наприклад, надіслати "котячу собаку" - це не те саме, що відправити "кота собаку".

Що я зробив для усунення несправностей, це вилучити код ФК із таблиці, в яку я вставляв дані, взяти до відома "Зовнішній ключ", який мав обмеження (у моєму випадку було 2) і переконатися, що ці 2 поля співпадають ТОЧНО, як вони були в таблиці, яка кидала помилку FK обмеження.

Одного разу я виправив 2 поля, що давали свої проблеми, життя було гарним!

Якщо вам потрібно краще пояснення, дайте мені знати.


Це мені справді допомогло ха-ха! Проігнорував цей факт, виправив у мене проблему! Дякую
Джоннатан Браун

4

Я також отримав таку ж помилку в моєму SQL-коді. Це рішення працює для мене,


Перевірте дані в первинній таблиці. Якщо ви вводите значення стовпця, якого немає у стовпці первинного ключа.


3

Це означає саме те, що сказано. Ви намагаєтеся вставити значення в стовпець, на якому є обмеження FK, яке не відповідає жодним значенням у таблиці пошуку.


2

Двічі перевірте поля у співвідношенні, для якого визначений зовнішній ключ. У студії управління SQL Server, можливо, не було вибраних полів, коли ви визначали відносини. Це спалило мене в минулому.


2
  1. запустити sp_helpconstraint
  2. зверніть УВАГУ на стовпчик constraint_keys, що повертається за зовнішнім ключем

2

Відсутні дані батьківської таблиці викликають проблему. У вашій проблемі недоступність даних у "dbo.Sup_Item_Cat" викликає проблему


1

У мене була така ж проблема, коли я використовував перші міграції коду, щоб створити свою базу даних для програми MVC 5. Зрештою, я знайшов насіннєвий метод у моєму файлі config.cs, що викликає проблему. Мій метод насіння створював запис таблиці для таблиці, що містить зовнішній ключ, перш ніж створити запис із відповідним первинним ключем.


1

Я зіткнувся з цією проблемою, коли мої поля вставки містили вкладки та пробіли, які не були очевидними неозброєним оком. Я створив свій список значень в Excel, скопіював і вставив його в SQL і запустив запити, щоб знайти невідповідність на моїх полях FK.

Запити на відповідність не виявили, що в моєму полі ФК були вкладки та пробіли, але INSERT розпізнав їх, і він продовжував генерувати помилку.

Я знову перевірив, скопіювавши вміст поля FK в один запис і вставивши його у вставний запит. Коли цей запис також не вдався, я придивився до даних і нарешті виявив вкладки / пробіли.

Щойно я очистив видалені вкладки / пробіли, мою проблему було вирішено. Сподіваюся, це комусь допоможе!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.