2012-04-30 40 views
80

Nếu tôi sử dụng lệnh SQL sau trong SQL Server 2008 để cập nhật một bảng với một ràng buộc khoá ngoại:SQL Thêm chính nước ngoài để cột hiện có

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

UserID là cột FK tôi trong bảng Employees . Tôi đang cố gắng tham chiếu UserID trong bảng ActiveDirectories của tôi. Tôi nhận được lỗi này:

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

+1

Ông có thể cung cấp schema hai bảng của bạn? –

+0

hãy tham khảo liên kết này http://stackoverflow.com/questions/35196951/how-can-id-assign-foreign-key-mysqli/35197004#35197004 – iOS

Trả lời

151

Lỗi cho biết không có cột UserID trong bảng Nhân viên của bạn. Trước tiên, hãy thử thêm cột và sau đó chạy lại câu lệnh.

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

Điều này đúng. DB của chúng tôi không cập nhật cột thêm của chúng tôi. Điều này đã được giải quyết nhưng không phải là cột của chúng tôi được thiết lập tôi vẫn không thể thêm ràng buộc. 'Không có khóa chính hoặc khóa ứng viên nào trong bảng tham chiếu 'ActiveDirectories' khớp với danh sách cột tham chiếu trong khóa ngoại 'FK__Employees__UserI__04E4BC85'.' – ExceptionLimeCat

+0

Có vẻ như bất kỳ cột nào được tham chiếu bởi FK__Employees__UserI__04E4BC85 không được định nghĩa là khóa CHÍNH hoặc khóa ứng cử viên trong ActiveDirectories bàn. – BluesRockAddict

+0

yea nhưng chắc chắn là PK của chúng tôi trong bảng ActiveDirectories – ExceptionLimeCat

16

Có thể bạn đã trở lại cột của mình ??

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 

Nó có thể được rằng cột được gọi là ID trong bảng Employees, và UserID trong bảng ActiveDirectories?

Sau đó, lệnh của bạn nên là:

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

Tôi biết nó lạ nhưng đáng tiếc là tên trong bảng id ActiveDirectory – ExceptionLimeCat

2

MySQL/SQL Server/Oracle/MS Access:

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

Để cho phép tên tuổi của một ràng buộc khoá ngoại, và để xác định một ràng buộc khoá ngoại trên nhiều cột, hãy sử dụng cú pháp SQL sau:

MySQL/SQL Server/Oracle/MS Truy cập:

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

cách tạo khóa ngoại chính xác cho ActiveDirectories (id), tôi nghĩ rằng những sai lầm chính là bạn đã không được đề cập khóa chính cho id trong bảng 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

Bạn nên cung cấp một số giải thích với câu trả lời của bạn – fen1x

Các vấn đề liên quan