2012-04-30 23 views
80

Se sto usando il seguente comando SQL in SQL Server 2008 per aggiornare una tabella con un vincolo di chiave esterna:SQL Aggiungi chiave esterna alla colonna esistente

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

UserID essendo mia colonna FK nella tabella Employees . Sto cercando di fare riferimento allo UserID nella mia tabella ActiveDirectories. Viene visualizzato questo errore:

Foreign key 'UserID' references invalid column 'UserID' in referencing table 'Employees'.

+1

Potrebbe fornire lo schema vostro due del tavolo? –

+0

fai riferimento a questo link http://stackoverflow.com/questions/35196951/how-can-id-assign-foreign-key-mysqli/35197004#35197004 – iOS

risposta

151

Errore indica che non è presente alcuna colonna ID utente nella tabella Impiegati. Prova ad aggiungere prima la colonna e poi rieseguire la dichiarazione.

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

Questo era corretto. Il nostro DB non ha aggiornato la nostra colonna di aggiunta. Questo problema è stato risolto ma non che la nostra colonna sia stata stabilita. Non riesco ancora ad aggiungere il vincolo. 'Non ci sono chiavi primarie o candidate nella tabella di riferimento 'ActiveDirectories' che corrispondono all'elenco delle colonne di riferimento nella chiave esterna 'FK__Employees__UserI__04E4BC85'. – ExceptionLimeCat

+0

Sembra che qualsiasi colonna sia referenziata da FK__Employees__UserI__04E4BC85 non è definita come PRIMARY KEY o chiave candidata in ActiveDirectories tavolo. – BluesRockAddict

+0

sì, ma è sicuramente il nostro PK nella tabella ActiveDirectories – ExceptionLimeCat

16

Forse hai le colonne indietro?

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 

Potrebbe essere che la colonna si chiama ID nella tabella Employees, e UserID nella tabella ActiveDirectories?

Poi il vostro comando dovrebbe essere:

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

So che è strano ma sfortunatamente il nome nell'id della tabella ActiveDirectory – ExceptionLimeCat

2

MySQL/SQL Server/Oracle/MS Access:

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

Per consentire intitolazione di un vincolo FOREIGN KEY, e per la definizione di un vincolo FOREIGN KEY su più colonne, utilizzare la seguente sintassi SQL:

MySQL/SQL Server/Oracle/MS Accesso:

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

modo di creazione chiave esterna corretta per ActiveDirectories (id), penso che l'errore principale è non è stato menzionato chiave primaria per id nella tabella ActiveDirectories

0
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 
+3

Dovresti fornire qualche spiegazione con la tua risposta – fen1x

Problemi correlati