Оператор INSERT конфликтует с ограничением FOREIGN KEY - SQL Server
Я получаю следующую ошибку. Не могли бы вы мне помочь?
Сообщение 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.. но без радости :-(
Ответы
Ответ 1
В вашей таблице dbo.Sup_Item_Cat
он имеет ссылку внешнего ключа на другую таблицу. Способ работы FK заключается в том, что он не может иметь значение в этом столбце, которое также не находится в столбце первичного ключа ссылочной таблицы.
Если у вас есть SQL Server Management Studio, откройте его и sp_help
'dbo.Sup_Item_Cat
. Посмотрите, в каком столбце включен FK, и в каком столбце которого он ссылается. Вы вставляете некоторые плохие данные.
Сообщите мне, если вам что-то объяснено лучше!
Ответ 2
Я сам столкнулся с этой проблемой, касающейся сообщения об ошибке, полученного при заполнении поля внешнего ключа. Я попал на эту страницу в надежде найти ответ. Проверенный ответ на этой странице действительно правильный, к сожалению, я чувствую, что ответ немного неполон для людей, не знакомых с SQL. Я довольно хорошо умею писать код, но запросы SQL для меня новы, как и создание таблиц базы данных.
Несмотря на то, что проверенный ответ является правильным:
Майк М wrote-
"Способ работы FK заключается в том, что он не может иметь значение в этом столбце, которого нет также в столбце первичного ключа в указанной таблице".
Чего не хватает в этом ответе просто;
Сначала вы должны создать таблицу, содержащую первичный ключ.
Еще один способ сказать это;
Вы должны вставить данные в родительскую таблицу, содержащую первичный ключ, прежде чем пытаться вставить данные в дочернюю таблицу, содержащую внешний ключ.
Короче говоря, многие учебные пособия, похоже, не соответствуют этому факту, так что если вы попробуете самостоятельно и не поймете, что существует порядок операций, вы получите эту ошибку. Естественно, после добавления данных первичного ключа ваши данные внешнего ключа в дочерней таблице должны соответствовать полю первичного ключа в родительской таблице, в противном случае вы все равно получите эту ошибку.
Если кто-то прочитал это далеко. Я надеюсь, что это помогло сделать проверенный ответ более ясным. Я знаю, что некоторые из вас могут почувствовать, что подобные вещи довольно просты и что открытие книги ответило бы на этот вопрос до того, как она была опубликована, но правда в том, что не все учатся одинаково.
Ответ 3
Вы пытаетесь вставить запись со значением в столбце внешнего ключа, которого нет во внешней таблице.
Например: если у вас есть таблицы "Книги" и "Авторы", в которых "Книги" имеют ограничение внешнего ключа для таблицы "Авторы", и вы пытаетесь вставить запись книги, для которой нет записи об авторе.
Ответ 4
Вам нужно будет опубликовать свое выражение для получения дополнительных разъяснений. Но...
Эта ошибка означает, что таблица, в которую вы вставляете данные, имеет отношение внешнего ключа к другой таблице. Прежде чем данные могут быть вставлены, сначала значение в поле внешнего ключа должно находиться в другой таблице.
Ответ 5
Проблема не в client_id из того, что я вижу. Это больше похоже на проблему с 4-м столбцом, sup_item_cat_id
Я бы запустил
sp_helpconstraint sup_item
и обратите внимание на столбец constraint_keys, возвращенный для внешнего ключа FK_Sup_Item_Sup_Item_Cat, чтобы подтвердить, какой столбец является реальной проблемой, но я уверен, что это не тот, который вы пытаетесь исправить. Кроме того, "123123" также выглядит подозрительным.
Ответ 6
Я обнаружил, что все поля должны соответствовать ТОЧНО.
Например, отправка "cat dog" не совпадает с отправкой "catdog".
То, что я сделал для устранения этого неполадки, заключалось в script из кода FK из таблицы, в которую я вставлял данные, обратите внимание на "Foreign Key" с ограничениями (в моем случае было 2) и убедитесь, что эти 2 значения полей соответствовали ТОЧНО, поскольку они были в таблице, которая бросала ошибку ограничения FK.
Как только я исправил 2 поля, дающие мои проблемы, жизнь была хорошей!
Если вам нужно лучшее объяснение, сообщите мне.
Ответ 7
Это означает именно то, что он говорит. Вы пытаетесь вставить значение в столбец с ограничениями FK на нем, который не соответствует никаким значениям в таблице поиска.
Ответ 8
Данные родительской таблицы не существуют, поэтому она вызывает проблему. Для вышеуказанной проблемы данные недоступны в таблице dbo.Sup_Item_Cat "
Ответ 9
Дважды проверьте поля в отношении, для которого задан внешний ключ. SQL Server Management Studio, возможно, не выбрали нужные вам поля при определении отношения. Это сожгло меня в прошлом.
Ответ 10
- запустить sp_helpconstraint
- заплатите ВНИМАНИЕ столбцу constraint_keys, возвращенному для внешнего ключа.
Ответ 11
Отсутствие данных родительской таблицы вызывает проблему.
В вашей проблеме не доступность данных в "dbo.Sup_Item_Cat" вызывает проблему
Ответ 12
У меня была такая же проблема, когда я использовал первые преобразования кода для создания моей базы данных для приложения MVC 5. В конце концов я нашел метод seed в моем файле configuration.cs, чтобы вызвать проблему. Мой метод seed создавал запись таблицы для таблицы, содержащей внешний ключ, перед созданием записи с соответствующим первичным ключом.
Ответ 13
Я столкнулся с этой проблемой, когда мои поля значений вставки содержали вкладки и пробелы, которые не были очевидны для невооруженного глаза. Я создал свой список значений в Excel, скопировал и вставил его в SQL, и запустил запросы, чтобы найти несоответствия в моих FK-полях.
В запросах совпадения не было обнаружено, что в моем поле FK есть вкладки и пробелы, но INSERT распознал их и продолжал генерировать ошибку.
Я снова тестировал, копируя содержимое поля FK в одной записи и вставляя его в запрос вставки. Когда эта запись также потерпела неудачу, я подошел ближе к данным и, наконец, обнаружил вкладки/пробелы.
Как только я очистил удаленные вкладки/пробелы, моя проблема была решена. Надеюсь, это поможет кому-то!
Ответ 14
Я также получил ту же ошибку в моем коде SQL, это решение работает для меня,
Проверьте данные в первичной таблице. Возможно, вы вводите значение столбца, которого нет в столбце первичного ключа.
Ответ 15
Иногда это происходит, когда вы пытаетесь Insert/Update
объект, в то время как foreign key
который вы пытаетесь Insert/Update
самом деле не существует. Поэтому убедитесь, что foreign key
существует, и повторите попытку.