2012-04-30 13 views
80

Si estoy usando el siguiente comando SQL en SQL Server 2008 para actualizar una tabla con una restricción de clave externa:SQL Agregar clave externa a la columna existente

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

UserID ser mi columna FK en la tabla Employees . Estoy tratando de hacer referencia al UserID en mi tabla ActiveDirectories. Recibo este error:

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

+1

Podría dar su esquema de dos de mesa? –

+0

consulte este enlace http://stackoverflow.com/questions/35196951/how-can-id-assign-key-key-mysqli/35197004#35197004 – iOS

Respuesta

151

de error indica que no hay ninguna columna ID de usuario en la tabla Empleados. Intente agregar la columna primero y luego vuelva a ejecutar la declaración.

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

Esto era correcto. Nuestro DB no estaba actualizando nuestra columna de agregar. Esto se ha resuelto, pero no es que nuestra columna esté establecida. Todavía no puedo agregar la restricción. 'No hay claves principales o candidatas en la tabla referenciada 'ActiveDirectories' que coincidan con la lista de columnas de referencia en la clave externa 'FK__Employees__UserI__04E4BC85'. – ExceptionLimeCat

+0

Parece que la columna a la que hace referencia FK__Empleados__UserI__04E4BC85 no está definida como PRIMARY KEY o clave candidata en ActiveDirectories mesa. – BluesRockAddict

+0

Sí, pero definitivamente es nuestro PK en la tabla ActiveDirectories – ExceptionLimeCat

16

¿Quizás tienes las columnas hacia atrás?

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 

Podría ser que la columna se llama ID en la tabla Employees y UserID en la tabla ActiveDirectories?

A continuación, el comando debe ser:

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

Sé que es extraño, pero desafortunadamente el nombre en la tabla de ActiveDirectory id – ExceptionLimeCat

2

MySQL/SQL Server/Oracle/MS Access:

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

Para permitir la designación de una restricción FOREIGN KEY, y para definir una restricción FOREIGN KEY en varias columnas, use la siguiente sintaxis SQL:

MySQL/SQL Server/Oracle/MS Access:

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

camino de la creación de clave externa correcta para ActiveDirectories (ID), creo que el principal error es que no ha mencionado clave principal de ID en la tabla 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

Debe proporcionar alguna explicación con su respuesta – fen1x

Cuestiones relacionadas