web-dev-qa-db-ja.com

INSERTステートメントがFOREIGN KEY制約と競合しました - SQL Server

次のようなエラーが出ます。手伝っていただけませんか?

メッセージ547、レベル16、状態0、行1
INSERTステートメントが、外部キー制約 "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がエラーの原因です。私はsup_itemに対応する列に既にdbo.Sup_Item_Catに存在する値を入れようとしました。しかし喜びはありません:-(

197
SmartestVEGA

あなたのテーブルdbo.Sup_Item_Catには、他のテーブルへの外部キー参照があります。 FKのしくみは、その列に、参照先テーブルの主キー列にもない値を持つことができないことです。

SQL Server Management Studioがある場合は、それを開いてsp_help 'dbo.Sup_Item_Cat'にします。 FKがどの列にあるか、およびどのテーブルのどの列を参照しているかを確認します。悪いデータを挿入しています。

説明が必要な場合はお知らせください。

249
Mike M.

外部キーフィールドに値を入力しようとして受信されたエラーメッセージに関して、私は自分自身でこの問題を抱えていました。私は答えを見つけることを期待してこのページに行きました。このページでチェックされた答えは確かに正しいものです、残念ながら私は答えがSQLに詳しくない人々にとって少し不完全なものであると感じます。私はかなりコードを書くのが得意ですが、SQLクエリはデータベーステーブルを構築するのと同様に私には新しいものです。

チェックされた答えが正しいにもかかわらず:

マイクMは書いた -

「FKの機能は、その列に参照先テーブルの主キー列にもない値を設定できないことです。」

この答えから欠けているのは単純です。

最初に主キーを含むテーブルを構築する必要があります。

別の言い方では、

外部キーを含む子テーブルにデータを挿入する前に、主キーを含む親テーブルにデータを挿入する必要があります。

手短に言うと、チュートリアルの多くは、この事実に目を光らせているように見えるため、自分で試してみて操作の順序があることに気付かなかった場合は、このエラーが発生します。主キーデータを追加した後も当然、子テーブルの外部キーデータは親テーブルの主キーフィールドに一致する必要があります。それ以外の場合は、このエラーが発生します。

これまでのところ誰かが読んだ場合。これがチェックされた答えをより明確にするのに役立ったと思います。私はこの種のことはかなり簡単で、本を開く前にこの質問に答えていたと思うかもしれませんが、真実は誰もが同じように学ぶわけではないということです。

116
plasmasnakeneo

外部テーブルに存在しない外部キーカラムに値を持つレコードを挿入しようとしています。

たとえば、BooksテーブルとAuthorsテーブルがあり、BooksテーブルにAuthorsテーブルに対する外部キー制約があり、著者レコードがないブックレコードを挿入しようとしたとします。

19
Matthew Smith

より明確にするためにあなたの声明を投稿する必要があります。しかし...

そのエラーは、データを挿入しているテーブルが別のテーブルと外部キー関係を持っていることを意味します。データを挿入する前に、外部キー項目の値が最初に他のテーブルに存在する必要があります

14
Justin Niessner

私が見つけたことは、すべてのフィールドが完全に一致しなければならないということでした。

たとえば、 'cat dog'を送信することは 'catdog'を送信することと同じではありません。

私がこれを解決するために私がデータを挿入していたテーブルからFKコードを書き出して、制約を持っていた「私の場合は2があった」「外部キー」を書き留め、それらの2つのフィールド値が一致それらがFK制約エラーを投げていたテーブルにあったように正確に。

私が私の問題を与えている2つの分野を修理したら、人生はよかったです!

もっと説明が必要な場合は、私に知らせてください。

5
John Waclawski

問題は私が見ることができるものからclient_idにはありません。 4列目のsup_item_cat_idに問題があるようです。

私は走る

sp_helpconstraint sup_item

そして、どの列が実際の問題であるかを確認するために、外部キーFK_Sup_Item_Sup_Item_Catに対して返されたconstraint_keys列に注意してください。 '123123'以外にも疑わしいようです。

5
Cobusve

それはまさにそれが言うことを意味します。ルックアップテーブルのどの値とも一致しないFK制約がある列に値を挿入しようとしています。

3
Donnie

親テーブルのデータが欠落していると問題が発生します。あなたの問題で "dbo.Sup_Item_Cat"のデータが利用できないことが問題の原因です。

2
sathish
  1. sp_helpconstraintを実行します。
  2. 外部キーに対して返されるconstraint_keys列へのATTENTIONの支払い
2
dotnet

外部キーが定義されている関係のフィールドを再確認してください。 SQL Server Management Studioでは、関係を定義したときに希望のフィールドが選択されていなかった可能性があります。これは私を過去にやけどさせました。

2
user1424678

MVC 5アプリケーション用にデータベースを構築するためにコードファーストマイグレーションを使用したときにも同じ問題がありました。私は最終的に私のconfiguration.csファイルでseedメソッドが問題を引き起こしていることを発見しました。私のシードメソッドは、一致する主キーを持つエントリを作成する前に、外部キーを含むテーブルのテーブルエントリを作成していました。

1
Paulie22

私は自分のSQLコードにも同じエラーが出ました。


主表のデータを確認してください主キー列に存在しない列値を入力している可能性があります。

1
Chandan Kumar

私の挿入値フィールドに裸眼では明らかではないタブとスペースが含まれていたとき、私はこの問題に遭遇しました。値リストをExcelで作成し、それをSQLにコピーして貼り付け、そしてクエリを実行してFKフィールドで不一致を見つけました。

FKフィールドにタブとスペースがあることをmatchクエリが検出しませんでしたが、INSERTがそれらを認識してエラーを生成し続けました。

FKフィールドの内容を1つのレコードにコピーし、それを挿入クエリに貼り付けてもう一度テストしました。そのレコードも失敗したとき、私はデータを詳しく調べて、ついにタブ/スペースを見つけました。

削除したタブやスペースをきれいにしたら、問題は解決しました。これが誰かに役立つことを願っています!

1
mns