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

110

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

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

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

Внешний ключ «UserID» ссылается на недопустимый столбец «UserID» в таблице ссылок «Employees».

ExceptionLimeCat
источник
1
Не могли бы вы предоставить схему ваших двух таблиц?
Stefan H
обратитесь к этой ссылке stackoverflow.com/questions/35196951/…
Джигар Дарджи

Ответы:

191

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

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

Может у вас колонки задом наперед перевернули ??

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" 
marc_s
источник
1
Я знаю это странное, но, к сожалению, имя в идентификаторе таблицы ActiveDirectory
ExceptionLimeCat
5

MySQL / SQL Server / Oracle / MS Доступ:

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

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

MySQL / SQL Server / Oracle / MS Доступ:

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
Вы должны дать некоторые пояснения к своему ответу
fen1x
0

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

Шива Рамакришна
источник
0

В будущем.

ALTER TABLE Employees
ADD UserID int;

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);
Krishneil
источник