Die INSERT-Anweisung steht in Konflikt mit der FOREIGN KEY-Einschränkung - SQL Server


225

Ich erhalte den folgenden Fehler. Kannst du mir bitte Helfen?

Nachricht 547, Ebene 16,
Status 0, Zeile 1 Die INSERT-Anweisung stand in Konflikt mit der FOREIGN KEY-Einschränkung "FK_Sup_Item_Sup_Item_Cat". Der Konflikt trat in der Datenbank "dev_bo", Tabelle "dbo.Sup_Item_Cat" auf. Die Anweisung wurde beendet.

Code:

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')

Die letzte Spalte client_idverursacht den Fehler. Ich habe versucht, den Wert, der bereits in der vorhanden ist, dbo.Sup_Item_Catin die Spalte zu setzen, die dem sup_item entspricht. Aber keine Freude :-(


20
Sie haben versucht, einen Datensatz in Ihre Artikeltabelle einzufügen, der keinen passenden Kategoriedatensatz in Ihrer Sup_Item_CatTabelle enthält. Dazu gibt es nicht viel zu sagen.
Martin Smith

1
Sie sagen also, dass SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id = '123123'Ergebnisse zurückgegeben werden?
Martin Smith

2
Sie sagen auch "das letzte Coulum" client_id "Ich bekomme den Konflikt." Dies ist nicht das, was die Fehlermeldung impliziert. Ich denke, Sie suchen am falschen Ort nach Ihrem Problem.
Martin Smith

Antworten:


287

In Ihrer Tabelle enthält dbo.Sup_Item_Cates einen Fremdschlüsselverweis auf eine andere Tabelle. Ein FK funktioniert so, dass er keinen Wert in dieser Spalte haben kann, der sich nicht auch in der Primärschlüsselspalte der referenzierten Tabelle befindet.

Wenn Sie über SQL Server Management Studio verfügen, öffnen Sie es und sp_help' dbo.Sup_Item_Cat'. Sehen Sie, in welcher Spalte sich FK befindet und auf welche Spalte welcher Tabelle es verweist. Sie fügen einige schlechte Daten ein.

Lassen Sie mich wissen, wenn Sie etwas besser erklärt brauchen!


10
Vielen Dank, dass Sie den Befehl sp_help eingefügt haben! Hat mir geholfen, mein ähnliches Problem einzugrenzen.
Gaʀʀʏ

In der Tat - in meinem Fall wurde die Eigenschaft einfach nicht aus der Ansicht an den Controller zurückgesendet, also war sie immer 0 (was keine gültige ID war, aber der Controller hätte keine Möglichkeit, das zu wissen.)
neminem

1
Alt + F1 ist die Abkürzung für sp_help, für zukünftige Leser wählen Sie eine Tabelle aus und drücken Sie Alt + f1
satsvelke

133

Ich hatte dieses Problem selbst in Bezug auf die Fehlermeldung, die beim Auffüllen eines Fremdschlüsselfelds empfangen wird. Ich bin auf dieser Seite gelandet, in der Hoffnung, die Antwort zu finden. Die überprüfte Antwort auf dieser Seite ist in der Tat die richtige. Leider bin ich der Meinung, dass die Antwort für Leute, die mit SQL nicht so vertraut sind, etwas unvollständig ist. Ich bin ziemlich geschickt darin, Code zu schreiben, aber SQL-Abfragen sind für mich neu und das Erstellen von Datenbanktabellen.

Obwohl die überprüfte Antwort richtig ist:

Mike M schrieb-

"Ein FK funktioniert so, dass er keinen Wert in dieser Spalte haben kann, der sich nicht auch in der Primärschlüsselspalte der referenzierten Tabelle befindet."

Was in dieser Antwort fehlt, ist einfach;

Sie müssen zuerst die Tabelle mit dem Primärschlüssel erstellen.

Ein anderer Weg, es zu sagen, ist;

Sie müssen Daten in die übergeordnete Tabelle mit dem Primärschlüssel einfügen, bevor Sie versuchen, Daten in die untergeordnete Tabelle mit dem Fremdschlüssel einzufügen.

Kurz gesagt, viele der Tutorials scheinen sich über diese Tatsache hinwegzusetzen, sodass Sie diesen Fehler erhalten würden, wenn Sie es selbst versuchen würden und nicht bemerken würden, dass es eine Reihenfolge von Operationen gibt. Nach dem Hinzufügen der Primärschlüsseldaten müssen Ihre Fremdschlüsseldaten in der untergeordneten Tabelle natürlich mit dem Primärschlüsselfeld in der übergeordneten Tabelle übereinstimmen. Andernfalls wird dieser Fehler weiterhin angezeigt.

Wenn jemand so weit nachlesen. Ich hoffe, dies hat dazu beigetragen, die überprüfte Antwort klarer zu machen. Ich weiß, dass es einige von Ihnen gibt, die vielleicht das Gefühl haben, dass so etwas ziemlich einfach ist und dass das Öffnen eines Buches diese Frage beantwortet hätte, bevor es veröffentlicht wurde, aber die Wahrheit ist, dass nicht jeder auf die gleiche Weise lernt.


Und ich würde hinzufügen, stellen Sie sicher, dass Sie Ihre Anfrage profilieren, da sie nicht immer das sendet, was Sie denken, dass es an die Datenbank sein sollte.
HLGEM

20

Sie versuchen, einen Datensatz mit einem Wert in die Fremdschlüsselspalte einzufügen, der in der Fremdtabelle nicht vorhanden ist.

Beispiel: Wenn Sie Bücher- und Autorentabellen haben, in denen Bücher eine Fremdschlüsseleinschränkung für die Autorentabelle haben, und Sie versuchen, einen Buchdatensatz einzufügen, für den es keinen Autorendatensatz gibt.


16

Sie müssen Ihre Erklärung zur weiteren Klärung veröffentlichen. Aber...

Dieser Fehler bedeutet, dass die Tabelle, in die Sie Daten einfügen, eine Fremdschlüsselbeziehung zu einer anderen Tabelle hat. Bevor Daten eingefügt werden können, wird der Wert in dem Fremdschlüsselfeld muss zuerst in der anderen Tabelle vorhanden ist .


5

Das Problem ist nicht mit client_id, soweit ich sehen kann. Es sieht eher so aus, als ob das Problem in der 4. Spalte liegt, sup_item_cat_id

ich würde Rennen

sp_helpconstraint sup_item

und achten Sie auf die Spalte Constraint_keys, die für den Fremdschlüssel FK_Sup_Item_Sup_Item_Cat zurückgegeben wird, um zu bestätigen, welche Spalte das eigentliche Problem ist, aber ich bin mir ziemlich sicher, dass es nicht die ist, die Sie beheben möchten. Außerdem sieht '123123' auch verdächtig aus.


5

Ich habe festgestellt, dass alle Felder genau übereinstimmen müssen.

Zum Beispiel ist das Senden von "Katzenhund" nicht dasselbe wie das Senden von "Katzenhund".

Um dies zu beheben, habe ich den FK-Code aus der Tabelle, in die ich Daten einfügte, ausgeschrieben, den "Fremdschlüssel" mit den Einschränkungen (in meinem Fall 2) notiert und sichergestellt, dass diese beiden Feldwerte übereinstimmen Genau so, wie sie in der Tabelle waren, die den FK-Einschränkungsfehler auslöste.

Nachdem ich die 2 Felder repariert hatte, die meine Probleme verursachten, war das Leben gut!

Wenn Sie eine bessere Erklärung benötigen, lassen Sie es mich wissen.


Das hat mir wirklich geholfen haha! Diese Tatsache übersehen, ein Problem behoben, das ich hatte! Vielen Dank
Johnathan Brown

4

Ich habe auch den gleichen Fehler in meinem SQL-Code erhalten. Diese Lösung funktioniert für mich.


Überprüfen Sie die Daten in der Primärtabelle. Möglicherweise geben Sie einen Spaltenwert ein, der in der Primärschlüsselspalte nicht vorhanden ist.


3

Es bedeutet genau das, was es sagt. Sie versuchen, einen Wert in eine Spalte einzufügen, für die eine FK-Einschränkung gilt, die keinen Werten in der Nachschlagetabelle entspricht.


2

Überprüfen Sie die Felder in der Beziehung, für die der Fremdschlüssel definiert ist. In SQL Server Management Studio wurden möglicherweise nicht die gewünschten Felder ausgewählt, als Sie die Beziehung definiert haben. Das hat mich in der Vergangenheit verbrannt.


2
  1. Führen Sie sp_helpconstraint aus
  2. Achten Sie auf die für den Fremdschlüssel zurückgegebene Spalte Constraint_keys

2

Fehlende übergeordnete Tabellendaten verursachen das Problem. In Ihrem Problem verursacht die Nichtverfügbarkeit von Daten in "dbo.Sup_Item_Cat" das Problem


1

Ich hatte das gleiche Problem, als ich Code-First-Migrationen verwendete, um meine Datenbank für eine MVC 5-Anwendung zu erstellen. Ich habe schließlich festgestellt, dass die Seed-Methode in meiner Datei configuration.cs das Problem verursacht. Meine Startmethode bestand darin, einen Tabelleneintrag für die Tabelle mit dem Fremdschlüssel zu erstellen, bevor der Eintrag mit dem passenden Primärschlüssel erstellt wurde.


1

Ich bin auf dieses Problem gestoßen, als meine Felder zum Einfügen von Werten Tabulatoren und Leerzeichen enthielten, die mit bloßem Auge nicht offensichtlich waren. Ich hatte meine Werteliste in Excel erstellt, kopiert und in SQL eingefügt und Abfragen ausgeführt, um Nichtübereinstimmungen in meinen FK-Feldern zu finden.

Die Übereinstimmungsabfragen haben nicht festgestellt, dass in meinem FK-Feld Tabulatoren und Leerzeichen vorhanden sind, aber das INSERT hat sie erkannt und den Fehler weiterhin generiert.

Ich habe erneut getestet, indem ich den Inhalt des FK-Felds in einen Datensatz kopiert und in die Einfügeabfrage eingefügt habe. Als dieser Datensatz ebenfalls fehlschlug, sah ich mir die Daten genauer an und entdeckte schließlich die Tabulatoren / Leerzeichen.

Nachdem ich entfernte Tabulatoren / Leerzeichen entfernt hatte, wurde mein Problem behoben. Hoffe das hilft jemandem!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.