SQL Adicionar chave estrangeira à coluna existente

110

Se eu estiver usando o seguinte comando SQL no SQL Server 2008 para atualizar uma tabela com uma restrição de chave estrangeira:

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

UserIDsendo minha coluna FK na Employeestabela. Estou tentando fazer referência a UserIDem minha ActiveDirectoriestabela. Recebo este erro:

A chave estrangeira 'ID do usuário' faz referência à coluna inválida 'ID do usuário' na tabela de referência 'Funcionários'.

ExceptionLimeCat
fonte
1
Você poderia fornecer o esquema de duas tabelas?
Stefan H
consulte este link stackoverflow.com/questions/35196951/…
Jigar Darji

Respostas:

191

Erro indica que não há coluna UserID em sua tabela Funcionários. Tente adicionar a coluna primeiro e, em seguida, execute novamente a instrução.

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);
BluesRockAddict
fonte
Isso estava correto. Nosso banco de dados não estava atualizando nossa coluna add. Isso foi resolvido, mas nossa coluna não foi estabelecida. Ainda não consigo adicionar a restrição. 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
Parece que qualquer coluna referenciada por FK__Employees__UserI__04E4BC85 não está definida como PRIMARY KEY ou chave candidata na tabela ActiveDirectories.
BluesRockAddict
sim, mas é definitivamente nosso PK na tabela ActiveDirectories
ExceptionLimeCat
1
RESOLVIDO: Há uma razão pela qual você cria ERDs e estabelece relacionamentos antes de construir. Tínhamos muitos registros em uma tabela, o que causou um erro ao tentar criar os relacionamentos com a outra tabela. Obrigado a todos.
ExceptionLimeCat
consulte este link stackoverflow.com/questions/35196951/…
Jigar Darji
19

Talvez você tenha invertido suas colunas ??

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

Será que a coluna é chamada IDna Employeestabela e UserIDna ActiveDirectoriestabela?

Então, seu comando deve ser:

ALTER TABLE Employees
ADD FOREIGN KEY (ID)                   <-- column in table "Employees"
REFERENCES ActiveDirectories(UserID)   <-- column in table "ActiveDirectories" 
marc_s
fonte
1
Eu sei que é estranho, mas infelizmente o nome no id da tabela ActiveDirectory
ExceptionLimeCat
5

Acesso MySQL / SQL Server / Oracle / MS:

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

Para permitir a nomenclatura de uma restrição FOREIGN KEY e para definir uma restrição FOREIGN KEY em várias colunas, use a seguinte sintaxe SQL:

Acesso MySQL / SQL Server / Oracle / MS:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Venkatesh Bandarapu
fonte
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
Sandy bhardwaj
fonte
5
Você deve fornecer alguma explicação com sua resposta
fen1x
0

forma de criação de chave estrangeira correta para ActiveDirectories (id), acho que o principal erro é que você não mencionou a chave primária para id na tabela ActiveDirectories

Siva Ramakrishna
fonte
0

No futuro.

ALTER TABLE Employees
ADD UserID int;

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