it-swarm.com.de

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

Ich erhalte die folgende Fehlermeldung. Kannst du mir bitte Helfen?

Meldung 547, Ebene 16, Status 0, Zeile 1
Die INSERT-Anweisung widersprach der FOREIGN KEY-Einschränkung "FK_Sup_Item_Sup_Item_Cat". Der Konflikt ist in der Datenbank "dev_bo", Tabelle "dbo.Sup_Item_Cat" aufgetreten. 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_id verursacht den Fehler. Ich habe versucht, den bereits vorhandenen Wert in das dbo.Sup_Item_Cat in die Spalte, die dem sup_item entspricht .. aber keine Freude :-(

203
SmartestVEGA

In deinem Tisch dbo.Sup_Item_Cat, es hat einen Fremdschlüsselverweis auf eine andere Tabelle. Wie ein FK funktioniert, kann es keinen Wert in dieser Spalte haben, der sich nicht auch in der Primärschlüsselspalte der referenzierten Tabelle befindet.

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

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

257
Mike M.

Ich selbst hatte dieses Problem in Bezug auf die Fehlermeldung, die beim Auffüllen eines Fremdschlüsselfelds angezeigt 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 kann ziemlich gut Code schreiben, aber SQL-Abfragen sind für mich neu und auch das Erstellen von Datenbanktabellen.

Trotz der überprüften Antwort ist richtig:

Mike M schrieb:

"Wie ein FK funktioniert, darf er keinen Wert in dieser Spalte haben, 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.

Eine andere Art, 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 diese Tatsache zu überdecken, so dass Sie, wenn Sie es alleine versuchen und nicht bemerken, dass es eine Operationsreihenfolge gibt, diese Fehlermeldung erhalten würden. Natürlich müssen Ihre Fremdschlüsseldaten in der untergeordneten Tabelle nach dem Hinzufügen der Primärschlüsseldaten mit dem Primärschlüsselfeld in der übergeordneten Tabelle übereinstimmen. Andernfalls wird dieser Fehler weiterhin angezeigt.

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

119
plasmasnakeneo

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

Beispiel: Wenn Sie über Books- und Authors-Tabellen verfügen, für die für Books eine Fremdschlüsseleinschränkung für die Authors-Tabelle gilt, und Sie versuchen, einen Buchdatensatz einzufügen, für den es keinen Autorendatensatz gibt.

20
Matthew Smith

Sie müssen Ihre Erklärung zur weiteren Klärung posten. 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, muss der Wert im Fremdschlüsselfeld muss zuerst in der anderen Tabelle vorhanden sein.

14
Justin Niessner

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

Zum Beispiel ist das Senden von 'cat dog' nicht dasselbe wie das Senden von 'catdog'.

Um dies zu beheben, musste ich den FK-Code aus der Tabelle, in die ich Daten einfügte, ausschreiben, den "Fremdschlüssel" notieren, der die Einschränkungen hatte (in meinem Fall waren es 2), und sicherstellen, dass diese 2 Feldwerte übereinstimmten Genau so, wie sie in der Tabelle waren, die den FK Constraint-Fehler ausgelöst hat.

Sobald ich die 2 Felder, die meine Probleme gaben, repariert hatte, war das Leben gut!

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

5
John Waclawski

Das Problem liegt nicht bei client_id, was ich sehen kann. Es sieht eher so aus, als ob das Problem in der vierten Spalte sup_item_cat_id liegt

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 zu beheben versuchen. Außerdem sieht '123123' auch verdächtig aus.

5
Cobusve

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.

3
Donnie

Fehlende Daten in der übergeordneten Tabelle verursachen das Problem. In Ihrem Problem verursacht die Nichtverfügbarkeit von Daten in "dbo.Sup_Item_Cat" das Problem

2
sathish
  1. führen Sie sp_helpconstraint aus
  2. achten Sie auf die Spalte constraint_keys, die für den Fremdschlüssel zurückgegeben wird
2
dotnet

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

2
user1424678

Ich hatte das gleiche Problem, als ich meine Datenbank mit Code-First-Migrationen für eine MVC 5-Anwendung erstellte. Schließlich stellte ich fest, dass die Seed-Methode in meiner Datei configuration.cs das Problem verursacht. Meine Ausgangsmethode war das Erstellen eines Tabelleneintrags für die Tabelle, die den Fremdschlüssel enthält, bevor der Eintrag mit dem entsprechenden Primärschlüssel erstellt wurde.

1
Paulie22

Ich habe auch den gleichen Fehler in meinem SQL-Code. 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.

1
Chandan Kumar

Ich bin auf dieses Problem gestoßen, als meine Felder zum Einfügen von Werten Tabulatoren und Leerzeichen enthielten, die für das bloße Auge nicht erkennbar 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 keine Tabulatoren und Leerzeichen in meinem FK-Feld festgestellt, aber das INSERT hat sie erkannt und den Fehler weiterhin generiert.

Ich habe es 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, schaute ich mir die Daten genauer an und erkannte schließlich die Tabulatoren/Leerzeichen.

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

1
mns