30 Stimmen

Hinzufügen eines Fremdschlüssels, SQL SERVER 2008

Ich versuche, einen Fremdschlüssel zu einer Tabelle hinzuzufügen, und er gibt mir die folgende Fehlermeldung:

Es gibt keine Primär- oder Kandidatenschlüssel in der referenzierten Tabelle "tbl_Person", die mit der referenzierenden Spaltenliste im Fremdschlüssel "P_ID" übereinstimmen.

Ich habe eine tbl_Person, die wie folgt definiert ist:

P_ID INT (Primary Key)
f_Name,
l_Name

die andere Tabelle ist eine Kommentartabelle, die wie folgt definiert ist:

C_ID INT,
Comments,
P_ID (should be the foreign key)

Ich versuche, eine Tabelle mit einer Eins-zu-vielen-Beziehung zu erstellen, so dass der Benutzer, wenn er einen Kommentar hinzufügt, auf diesen zurückverwiesen wird. Außerdem kann er zu den Kommentaren hinzufügen, ohne einen neuen Kommentar zu initialisieren. Ich hoffe, das macht ein wenig Sinn.

Beispiel: Randy Bing gibt "I love SQL" ein, seine ID ist 1, f_Name ist Randy, l_Name ist Bing, seine Kommentare sind "I love Sql". Seine Kommentare sollten eine eindeutige ID speichern und auch seine P_ID importieren.

Wenn Randy später einen Kommentar mit der gleichen C_ID hinzufügen möchte, bei dem die P_ID mit seiner übereinstimmt, ohne eine neue C_ID zu erstellen.

Hier ist der Code:

ALTER TABLE tbl_Comments 
ADD CONSTRAINT P_ID
FOREIGN KEY (P_ID) 
REFERENCES tbl_Person(P_ID)

Bin ich nahe dran, auf dem richtigen Weg zu sein?

81voto

gbn Punkte 407102

Dieser Fehler bedeutet in der Regel, dass die Datentypen zwischen "Comments" und "Person" unterschiedlich sind, wenn man davon ausgeht, dass dies die eigentliche Meldung ist

Die SQL sollte wie folgt lauten

ALTER TABLE tbl_Comments WITH CHECK ADD
 CONSTRAINT FK_Comments_Person FOREIGN KEY (P_ID) REFERENCES tbl_Person (P_ID)

Dies entspricht dem, was Sie hinzugefügt haben. Also:

  • Prüfdatentypen sind beide int
  • sicherstellen, dass P_ID ein Primärschlüssel in tbl_Person ist
  • (Bearbeiten, Dez 2011) Sortierung und Länge müssen auch für varchar-Spalten gleich sein

4voto

GANI Punkte 1957

Verbinden Sie sich im Object Explorer mit einer Instanz von Database Engine.

Klicken Sie in der Standardleiste auf Neue Abfrage.

Das Beispiel erstellt einen Fremdschlüssel für die Spalte TempID und verweist auf die Spalte SalesReasonID in der Tabelle Sales.SalesReason.

  USE AdventureWorks2012;
  GO
  ALTER TABLE Sales.TempSalesReason 
  ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) 
  REFERENCES Sales.SalesReason (SalesReasonID) 
  ON DELETE CASCADE
  ON UPDATE CASCADE
  ;
  GO

0voto

alex Punkte 399

Der Name Ihrer Einschränkung, p_id, kollidiert mit dem Namen der Spalte p_id

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X