Вопрос по sql-server-2008 – SQL Добавить внешний ключ в существующий столбец

96

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

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

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

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

обратитесь по этой ссылкеstackoverflow.com/questions/35196951/… iOS
Не могли бы вы предоставить схему из двух таблиц? Stefan H

Ваш Ответ

6   ответов
173

Ошибка означает, что в таблице «Сотрудники» нет столбца UserID. Попробуйте сначала добавить столбец, а затем снова запустите оператор.

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);
обратитесь по этой ссылкеstackoverflow.com/questions/35196951/…
Похоже, что столбец, на который ссылается FK__Employees__UserI__04E4BC85, не определен как PRIMARY KEY или ключ-кандидат в таблице ActiveDirectories.
Это было правильно. Наша БД не обновляла нашу колонку добавления. Это было решено, но не наш столбец установлен. Я все еще не могу добавить ограничение.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
да, но это определенно наш ПК в таблице ActiveDirectories ExceptionLimeCat
РЕШЕНО: Существует причина, по которой вы создаете ERD и устанавливаете отношения до создания. У нас было слишком много записей в одной таблице, что вызвало ошибку при попытке установить отношения с другой таблицей. Спасибо всем. ExceptionLimeCat
2

MySQL / SQL Server / Oracle / MS Access:

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

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

MySQL / SQL Server / Oracle / MS Access:

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

В будущем.

ALTER TABLE Employees
ADD UserID int;

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

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

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" 
Я знаю это странно, но, к сожалению, имя в таблице идентификаторов ActiveDirectory ExceptionLimeCat
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
Вы должны предоставить некоторые объяснения с вашим ответом
0

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

Похожие вопросы