SQL Fügen Sie der vorhandenen Spalte einen Fremdschlüssel hinzu


110

Wenn ich in SQL Server 2008 den folgenden SQL-Befehl verwende, um eine Tabelle mit einer Fremdschlüsseleinschränkung zu aktualisieren:

ALTER TABLE Employees
ADD FOREIGN KEY (UserID)
REFERENCES ActiveDirectories(id)

UserIDals meine FK-Spalte in der EmployeesTabelle. Ich versuche das UserIDin meiner ActiveDirectoriesTabelle zu referenzieren . Ich erhalte diesen Fehler:

Der Fremdschlüssel 'UserID' verweist auf die ungültige Spalte 'UserID' in der Referenzierungstabelle 'Employees'.


1
Könnten Sie das Schema Ihrer beiden Tabellen angeben?
Stefan H

Antworten:


191

Der Fehler zeigt an, dass Ihre Employees-Tabelle keine UserID-Spalte enthält. Fügen Sie zuerst die Spalte hinzu und führen Sie die Anweisung erneut aus.

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);

Das war richtig. Unsere Datenbank hat unsere Spalte zum Hinzufügen nicht aktualisiert. Dies wurde behoben, aber nicht, dass unsere Spalte eingerichtet ist. Ich kann die Einschränkung immer noch nicht hinzufügen. There are no primary or candidate keys in the referenced table 'ActiveDirectories' that match the referencing column list in the foreign key 'FK__Employees__UserI__04E4BC85'.
ExceptionLimeCat

Die Spalte, auf die FK__Employees__UserI__04E4BC85 verweist, ist in der ActiveDirectories-Tabelle nicht als PRIMARY KEY oder Kandidatenschlüssel definiert.
BluesRockAddict

Ja, aber es ist definitiv unsere PK in der ActiveDirectories-Tabelle
ExceptionLimeCat

1
BEHOBEN: Es gibt einen Grund, warum Sie vor dem Aufbau ERDs erstellen und Beziehungen aufbauen. Wir hatten zu viele Datensätze in einer Tabelle, was zu einem Fehler beim Erstellen der Beziehungen zur anderen Tabelle führte. Vielen Dank an alle.
ExceptionLimeCat


19

Vielleicht hast du deine Spalten rückwärts?

ALTER TABLE Employees
ADD FOREIGN KEY (UserID)           <-- this needs to be a column of the Employees table
REFERENCES ActiveDirectories(id)   <-- this needs to be a column of the ActiveDirectories table

Könnte es sein, dass die Spalte IDin der EmployeesTabelle und UserIDin der ActiveDirectoriesTabelle aufgerufen wird ?

Dann sollte Ihr Befehl lauten:

ALTER TABLE Employees
ADD FOREIGN KEY (ID)                   <-- column in table "Employees"
REFERENCES ActiveDirectories(UserID)   <-- column in table "ActiveDirectories" 

1
Ich weiß, dass es seltsam ist, aber leider der Name in der ActiveDirectory-Tabellen-ID
ExceptionLimeCat

5

MySQL / SQL Server / Oracle / MS-Zugriff:

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

Verwenden Sie die folgende SQL-Syntax, um die Benennung einer FOREIGN KEY-Einschränkung zu ermöglichen und eine FOREIGN KEY-Einschränkung für mehrere Spalten zu definieren:

MySQL / SQL Server / Oracle / MS-Zugriff:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

1
ALTER TABLE Faculty 
WITH CHECK ADD  CONSTRAINT FKFacultyBook
FOREIGN KEY FacId
REFERENCES Book Book_Id

ALTER TABLE Faculty 
WITH CHECK ADD  CONSTRAINT FKFacultyStudent 
FOREIGN KEY FacId
REFERENCES Student StuId

5
Sie sollten eine Erklärung mit Ihrer Antwort geben
fen1x

0

Ich denke, der Hauptfehler ist, dass Sie den Primärschlüssel für die ID in der ActiveDirectories-Tabelle nicht erwähnt haben


0

In der Zukunft.

ALTER TABLE Employees
ADD UserID int;

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);
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.