Ich habe ein Problem beim Versuch, meiner tblDomare
Tabelle einen Fremdschlüssel hinzuzufügen . Was mache ich hier falsch?
CREATE TABLE tblDomare
(PersNR VARCHAR (15) NOT NULL,
fNamn VARCHAR (15) NOT NULL,
eNamn VARCHAR (20) NOT NULL,
Erfarenhet VARCHAR (5),
PRIMARY KEY (PersNR));
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (6811034679,'Bengt','Carlberg',10);
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (7606091347,'Josefin','Backman',4);
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (8508284163,'Johanna','Backman',1);
CREATE TABLE tblBana
(BanNR VARCHAR (15) NOT NULL,
PRIMARY KEY (BanNR));
INSERT INTO tblBana (BanNR)
Values (1);
INSERT INTO tblBana (BanNR)
Values (2);
INSERT INTO tblBana (BanNR)
Values (3);
ALTER TABLE tblDomare
ADD FOREIGN KEY (PersNR)
REFERENCES tblBana(BanNR);
Fehlermeldung:
Die Anweisung ALTER TABLE stand in Konflikt mit der FOREIGN KEY-Einschränkung " FK_tblDomare _PersN__5F7E2DAC". Der Konflikt trat in der Datenbank "almu0004", Tabelle "dbo.tblBana", Spalte "BanNR" auf.
sql
sql-server
database
user3162932
quelle
quelle
Diese Abfrage war sehr nützlich für mich. Es werden alle Werte angezeigt, die keine Übereinstimmungen haben
quelle
Versuchen Sie diese Lösung:
quelle
Es ist möglich, den Fremdschlüssel mit dem Tabellennamen ALTER TABLE WITH NOCHECK ... zu erstellen, wodurch Daten zugelassen werden, die gegen den Fremdschlüssel verstoßen.
Option "ALTER TABLE tablename WITH NOCHECK ..." zum Hinzufügen des FK - Diese Lösung hat bei mir funktioniert.
quelle
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.DETACH) @JoinTable(name = "tbUsuariosTipoOcorrencia", joinColumns = { @JoinColumn(name = "idUsuario") }, inverseJoinColumns = { @JoinColumn(name = "idTipoOcorrencia") })
und ich habe dies über eine Datenbankabfrage gelöst:alter table tbUsuariosTipoOcorrencia WITH NOCHECK add constraint FKnbxg3ua7b8c5d53wps69q6jh foreign key (idUsuario) references tbUsuarios
Ich denke, ein Spaltenwert in einer Fremdschlüsseltabelle sollte mit dem Spaltenwert der Primärschlüsseltabelle übereinstimmen. Wenn wir versuchen, eine Fremdschlüsseleinschränkung zwischen zwei Tabellen zu erstellen, bei der sich der Wert in einer Spalte (der der Fremdschlüssel sein wird) vom Spaltenwert der Primärschlüsseltabelle unterscheidet, wird die Nachricht ausgegeben.
Es wird daher immer empfohlen, nur die Werte in die Spalte Fremdschlüssel einzufügen, die in der Spalte Primärschlüsseltabelle vorhanden sind.
Zum Beispiel. Wenn die Primärtabellenspalte die Werte 1, 2, 3 hat und in der Fremdschlüsselspalte die eingefügten Werte unterschiedlich sind, wird die Abfrage nicht ausgeführt, da erwartet wird, dass die Werte zwischen 1 und 3 liegen.
quelle
Führen Sie die folgenden Schritte aus, bevor Sie der Tabelle einen Fremdschlüssel hinzufügen
Wenn die Tabelle enthält, gehen Sie nicht zum Entwerfen und Ändern, sondern manuell.
Tabelle ändern Tabelle 1 Verweise auf Fremdschlüssel (Spaltenname) hinzufügen Tabelle 2 (Spaltenname)
alter table Tabelle 1 alter column Spaltenname Attribut nicht null
quelle
Bereinigen Sie Ihre Daten aus Ihren Tabellen und stellen Sie dann eine Beziehung zwischen ihnen her.
quelle
Probieren Sie
DELETE
die aktuellen Daten austblDomare.PersNR
. Weil die Werte intblDomare.PersNR
mit keinem der Werte in übereinstimmtentblBana.BanNR
.quelle
Ich hatte auch diesen Fehler, als Smutje erneut darauf hinwies, dass Sie keinen Wert in der Fremdschlüsselspalte Ihrer Basis-Fremdschlüsseltabelle haben, der nicht in Ihrer Referenztabelle enthalten ist, dh (jeden Wert in Ihrer Basis-Fremdschlüsseltabelle (Wert einer Spalte) Fremdschlüssel) muss sich auch in Ihrer Referenztabellenspalte befinden) Es ist gut, zuerst Ihre Basis-Fremdschlüsseltabelle zu leeren und dann Fremdschlüssel zu setzen
quelle
Die Daten, die Sie in eine Tabelle (tbldomare) eingegeben haben, stimmen nicht mit den Daten überein, die Sie der Primärschlüsseltabelle zugewiesen haben. schreibe zwischen tbldomare und füge dieses Wort hinzu (mit nocheck) und führe dann deinen Code aus.
Sie haben beispielsweise eine Tabelle mit diesen Daten eingegeben
und Sie haben eine
foreign key
Tabelle zugewiesen , die nur akzeptiert werden soll1,2,3
.Sie haben zwei Lösungen. Eine besteht darin, die Daten zu löschen, die Sie in eine Tabelle eingegeben haben, und dann den Code auszuführen. ein anderes ist, dieses Wort zu schreiben (mit nocheck), es zwischen deinen Tabellennamen zu setzen und so hinzuzufügen
quelle
Dies passiert mir, da ich beim Entwerfen meiner Datenbank bemerke, dass ich meinen Startwert in meiner Haupttabelle ändere. Jetzt hat die relationale Tabelle keinen Fremdschlüssel in der Haupttabelle.
Also muss ich beide Tabellen abschneiden, und es funktioniert jetzt!
quelle
Sie sollten sehen, ob Ihre Tabellen Daten in den Zeilen enthalten. Wenn „ja“ , dann sollten Sie die Tabelle (n) gestutzt oder sonst können Sie ihnen die gleiche Anzahl von Daten zu haben , machen
tblDomare.PersNR
zutblBana.BanNR
und umgekehrt.quelle
Smutje hat recht und Chad HedgeCock bot ein großartiges Beispiel für Laien. Ich möchte auf dem Beispiel von Chad aufbauen, indem ich eine Möglichkeit anbiete, diese Datensätze zu finden / löschen. Wir werden den Kunden als Elternteil und die Bestellung als Kind verwenden. CustomerId ist das allgemeine Feld.
Wenn Sie diesen Thread lesen ... erhalten Sie Ergebnisse. Dies sind verwaiste Kinder. Wählen Sie * aus Order Child left join Customer Parent auf Child.CustomerId = Parent.CustomerId, wobei Parent.CustomerId null ist. Beachten Sie die Zeilenanzahl unten rechts.
Überprüfen Sie, mit wem Sie diese Zeilen löschen möchten!
Führen Sie das erste Bit aus. Überprüfen Sie die Zeilenanzahl = was Sie erwartet haben
den Tran begehen
Achtung. Jemandes schlampige Programmierung hat Sie in dieses Chaos gebracht. Stellen Sie sicher, dass Sie das Warum verstehen, bevor Sie die Waisenkinder löschen. Vielleicht muss der Elternteil wiederhergestellt werden.
quelle
In meinem Szenario mit EF habe ich beim Versuch, diesen neuen Fremdschlüssel für vorhandene Daten zu erstellen, fälschlicherweise versucht, die Daten nach dem Erstellen des Fremdschlüssels zu füllen (Verknüpfungen herzustellen).
Das Update besteht darin, Ihre Daten vor dem Erstellen des Fremdschlüssels zu füllen, da alle überprüft werden, um festzustellen, ob die Links tatsächlich gültig sind. Es könnte also unmöglich funktionieren, wenn Sie es noch nicht ausgefüllt haben.
quelle
Ich habe ein Problem in meinem Projekt.
In der untergeordneten Tabelle gibt es keine Datensatz-ID gleich 1 und 11
Ich habe die Tabelle DEAL_ITEM_THIRD_PARTY_PO eingefügt, deren ID 1 und 11 entspricht, dann kann ich FK erstellen
quelle
Bitte löschen Sie zuerst Daten aus dieser Tabelle und führen Sie dann die Migration erneut aus. Sie werden Erfolg haben
quelle
Wenn Sie in Tabelle B einen Fremdschlüssel definieren, der auf den Primärschlüssel von Tabelle A verweist, bedeutet dies, dass sich ein Wert in B in A befinden muss, um inkonsistente Änderungen an den Tabellen zu vermeiden.
In Ihrem Beispiel enthalten Ihre Tabellen:
tblDomare mit
PRIMARY KEY (PersNR)
:tblBana:
Diese Aussage:
sagt, dass jede Zeile
tblDomare
mit dem SchlüsselPersNR
eine Entsprechung in der TabelletblBana
auf dem Schlüssel haben mussBanNR
. Ihr Fehler liegt darin, dass Sie ZeilentblDomare
ohne Entsprechung eingefügt habentblBana
.2 Lösungen zur Behebung Ihres Problems: - Fügen Sie entweder Zeilen
tblBana
mitBanNR in (6811034679, 7606091347, 8508284163) - or remove all lines in
tblDomarethat have no correspondance in
tblBana` hinzu (aber Ihre Tabelle wäre leer).Allgemeiner Hinweis : Sie sollten die Fremdschlüsseleinschränkung haben, bevor Sie die Tabellen füllen. Fremdschlüssel sollen verhindern, dass der Benutzer der Tabelle die Tabellen mit Inkonsistenzen füllt.
quelle
und nur zu Ihrer Information, falls Sie alle Ihre Datenreferenzprüfungen durchführen und keine fehlerhaften Daten finden ... anscheinend ist es nicht möglich, eine Fremdschlüsseleinschränkung zwischen zwei Tabellen und Feldern zu erstellen, wobei diese Felder der Primärschlüssel in beiden Tabellen sind! Frag mich nicht, woher ich das weiß.
quelle