SQL добавить внешний ключ к существующему столбцу


если я использую следующую команду SQL в SQL Server 2008 для обновления таблицы с ограничением внешнего ключа:

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

UserID будучи моей колонкой FK в Employees таблица. Я пытаюсь ссылаться на UserID в своем ActiveDirectories таблица. Я получаю эту ошибку:

внешний ключ 'Id_пользователя' ссылается на неверный идентификатор колонки в ссылках таблица "сотрудники".

6 87

6 ответов:

ошибка указывает на отсутствие столбца UserID в таблице Employees. Попробуйте сначала добавить столбец, а затем повторно запустить инструкцию.

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

может быть, вы получили ваши колонки назад??

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

может ли быть, что столбец называется ID на Employees таблица, и UserID на ActiveDirectories таблицы?

тогда ваша команда должна быть:

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

MySQL / SQL Server / Oracle / MS Access:

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

чтобы разрешить именование ограничения внешнего ключа и определить ограничение внешнего ключа для нескольких столбцов, используйте следующий синтаксис SQL:

MySQL / SQL Server / Oracle / MS Access:

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

способ создания внешнего ключа правильный для ActiveDirectories (id), я думаю, что основная ошибка заключается в том, что вы не упомянули первичный ключ для id в таблице ActiveDirectories

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

в будущем.

ALTER TABLE Employees
ADD UserID int;

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