wake-up-neo.com

SQL Server 2008: Die Spalten in der Tabelle stimmen nicht mit einem vorhandenen Primärschlüssel oder einer eindeutigen Einschränkung überein

Ich muss einige Änderungen an einer SQL Server 2008-Datenbank vornehmen. 

Dies erfordert die Erstellung einer neuen Tabelle und das Einfügen eines Fremdschlüssels in die neue Tabelle, die auf den Primärschlüssel einer bereits vorhandenen Tabelle verweist. Ich möchte also eine Beziehung zwischen meinem neuen tblTwo herstellen, der auf den Primärschlüssel von tblOne verweist. 

Als ich dies jedoch versuchte (über SQL Server Management Studio), erhielt ich die folgende Fehlermeldung:

Die Spalten in der Tabelle 'tblOne' haben keine Übereinstimmung mit einem vorhandenen Primärschlüssel oder Einzigartige Beschränkung

Ich bin nicht wirklich sicher, was das bedeutet, und ich habe mich gefragt, ob es irgendeinen Ausweg gibt?

48
109221793

Dies bedeutet, dass der Primärschlüssel in tblOne nicht ordnungsgemäß deklariert wurde. Sie müssen zu tblOne gehen und die PRIMARY KEY-Einschränkung wieder hinzufügen.

Wenn Sie sicher sind, dass tblOne über eine PRIMARY KEY-Einschränkung verfügt, befinden sich in Ihrer Datenbank möglicherweise mehrere tblOne-Tabellen, die zu verschiedenen Schemas gehören, und Ihre referenzierende Klausel in Ihrer FK-Einschränkung wählt die falsche aus.

Wenn es einen zusammengesetzten Schlüssel gibt (was Ihr Kommentar anzeigen würde), müssen Sie auch beide Spalten in Ihre Fremdschlüsselreferenz aufnehmen. Beachten Sie, dass eine Tabelle nicht über mehrere Primärschlüssel verfügen kann. Wenn jedoch ein zusammengesetzter Schlüssel vorhanden ist, wird neben jeder Spalte ein Schlüsselsymbol angezeigt, das Teil des Primärschlüssels ist.

73

Wenn Sie einen zusammengesetzten Schlüssel haben, ist die Reihenfolge beim Erstellen eines FK wichtig, und manchmal wird die Reihenfolge nicht so dargestellt. 

Ich gehe in den Keys-Abschnitt von table1 und wähle den Skript-Primärschlüssel als in Zwischenablage erstellen und dann FK in der in Skript gezeigten Reihenfolge aus

51
alanh

Wenn Sie diesen Fehler immer noch erhalten, nachdem Sie alle Ratschläge aus den obigen Antworten befolgt haben und alles richtig aussieht.

Sie können dies beheben, indem Sie die Primärschlüssel für beide Tabellen entfernen, auf Speichern, Aktualisieren klicken und sie erneut hinzufügen. Versuchen Sie dann erneut, Ihre Beziehung hinzuzufügen.

5
Ruan

Ich hatte diese Situation, die mich zu diesem Thema geführt hat. Gleicher Fehler, aber eine andere Ursache. Vielleicht hilft es jemandem.

Table1
ColA (PK)
ColB (PK)
ColC


Table2
ID (PK)
ColA
COLB

Beim Versuch, einen Fremdschlüssel in Tabelle2 zu erstellen, habe ich Werte in umgekehrter Reihenfolge aus dem Kombinationsfeld ausgewählt

Table1.ColB = Table2.ColB
Table1.ColA = Table2.ColA

Dies warf mir einen Fehler wie im Themennamen. Erstellen von FK, wobei die Reihenfolge der Spalten in der Primärschlüsseltabelle beibehalten wird, wodurch der Fehler verschwindet.

Blöd, aber .. :)

4
100r

Dieses Problem hat mich erwischt, ich fügte die Beziehung am falschen Tisch hinzu. Wenn Sie also versuchen, eine Beziehung in Tabelle A zu Tabelle B hinzuzufügen, fügen Sie die Beziehung in Tabelle B zu Tabelle A hinzu.

2

Dieser Fehler ist bei mir When aufgetreten. Ich habe versucht add foreign key einschränken, beginnend mit PrimaryKey Table

Einfach in eine andere Tabelle gehen und dort create this foreign key-Einschränkung from dort (foreign key Table)

2

Ich habe festgestellt, dass die Spaltennamen übereinstimmen müssen.

Beispiel: Wenn also TblOne eine ID namens categoryId hat, muss eine Referenz in tblTwo auch als categoryId bezeichnet werden.

_tblname, primary key name, foreign key_
tblOne, "categoryId", none
tblTwo, "exampleId", "categoryId"

Ich habe dies bemerkt, als ich versuchte, einen Fremdschlüssel zwischen zwei Tabellen zu erstellen, die beide den Spaltennamen "id" als Primärschlüssel hatten.

0
Per G

Wenn Sie Daten in Ihren Tabellen haben, könnte dies das Problem sein.

In meinem Fall hatte ich einige Daten in der Kontotabelle, die ich um 15.00 Uhr geladen habe, und einige Daten in der Kontakttabelle, die ich um 15:10 Uhr geladen habe. Daher hatte die Kontakttabelle einige Werte, die noch nicht in meiner Kontotabelle waren.

Am Ende löschte ich diese Werte aus der Kontakttabelle und konnte dann problemlos einen Schlüssel hinzufügen. 

0
Pete Kozak

Wenn nichts hilft, könnte dies der Grund sein: Betrachten Sie diesen Fall: ____ Tabelle A: Spalte 4

Tabelle B: Spalte a (Primärschlüssel) Spalte b Spalte c

wenn Sie eine Abhängigkeit von B bis A definieren, müssen Sie die Reihenfolge, in der die Primärfarben definiert sind, einhalten.

Das bedeutet, dass Ihre Abhängigkeit so aussehen sollte: Tabelle A Tabelle B Spalte 1 Spalte b Spalte 2 Spalte c

UND NICHT: Tabelle A Tabelle B Spalte 2 Spalte c Spalte 1 Spalte b

dies führt dann zu dem Fehler, auf den Sie stoßen.

0
Samsky

Ich habe einen anderen Weg gefunden, um diesen Fehler zu erhalten. Dies kann auch passieren, wenn Sie versuchen, einen rekursiven Fremdschlüssel (einen Fremdschlüssel für den Primärschlüssel in derselben Tabelle) in der Entwurfsansicht in SQL Management Studio zu erstellen. Wenn Sie die Tabelle noch nicht mit dem Primärschlüssel gespeichert haben, wird diese Nachricht zurückgegeben. Speichern Sie einfach die Tabelle, dann können Sie den Fremdschlüssel erstellen.

0
Caimen

Anscheinend versuchen Sie, einen Fremdschlüssel in TblTwo zu erstellen, der keinem Primärschlüssel oder einem eindeutigen Index in TblOne entspricht (oder daran beteiligt ist).

Überprüfen Sie diesen Link auf MSDN . Hier haben Sie einen weiteren Link mit einem praktischen Fall .

EDIT:

Antworte auf Ihren Kommentar. Ich verstehe, dass Sie meinen, dass es zwei Felder im Primärschlüssel gibt (was ihn zu einem Verbund macht). In SQL ist es nicht möglich, zwei Primärschlüssel in derselben Tabelle zu haben. 

IMHO sollte ein Fremdschlüsselfeld immer auf ein einzelnes Register in der referenzierten Tabelle verweisen (d. H. In Ihrem Fall den gesamten Primärschlüssel). Das bedeutet, dass Sie beide Felder des tblOne-Primärschlüssels in tblTwo eingeben müssen, bevor Sie den Fremdschlüssel erstellen können.

Wie auch immer, ich habe ein bisschen über das Internet nachgeforscht und es scheint, dass SQL Server 2008 (wie in früheren Versionen und anderen RDBMS) Ihnen die Möglichkeit gibt, nur einen Teil des Primärschlüssels zu referenzieren, solange dieser Teil ein Kandidatenschlüssel ist (Not Null und Unique) und Sie erstellen eine eindeutige Einschränkung.

Ich bin nicht sicher, ob Sie das in Ihrem Fall verwenden können, aber überprüfen Sie dieses Link für weitere Informationen.

0
Guillem Vicens