SQL Thêm khóa ngoại vào cột hiện có


110

Nếu tôi đang sử dụng lệnh SQL sau trong SQL Server 2008 để cập nhật bảng có ràng buộc khóa ngoại:

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

UserIDlà cột FK của tôi trong Employeesbảng. Tôi đang cố gắng tham khảo bảng UserIDcủa tôi ActiveDirectories. Tôi nhận được lỗi này:

Khóa ngoại 'UserID' tham chiếu cột không hợp lệ 'UserID' trong bảng tham chiếu 'Nhân viên'.


1
Bạn có thể cung cấp lược đồ của hai bảng không?
Stefan H

Câu trả lời:


191

Lỗi chỉ ra rằng 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);

Điều này đã chính xác. DB của chúng tôi đã không cập nhật cột bổ sung 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. 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

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

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

1
GIẢI QUYẾT: Có một lý do tại sao bạn tạo ERD và thiết lập mối quan hệ trước khi xây dựng. Chúng tôi có quá nhiều bản ghi trong một bảng đã gây ra lỗi khi cố gắng tạo mối quan hệ với bảng kia. Cảm ơn tất cả.
ExceptionLimeCat


19

Có lẽ bạn đã có các cột của bạn trở lại ??

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 gọi là cột IDtrong Employeesbảng và UserIDtrong ActiveDirectoriesbảng?

Sau đó, lệnh của bạn phải 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 tiếc là tên trong id bảng ActiveDirectory
ExceptionLimeCat

5

MySQL / SQL Server / Oracle / MS Access:

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

Để cho phép đặt tên cho ràng buộc NGOẠI KHÓA và để xác định ràng buộc NGOẠI KHÓA trên nhiều cột, hãy sử dụng cú pháp SQL sau:

MySQL / SQL Server / Oracle / MS Access:

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
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

0

cách tạo khóa ngoại đúng cho ActiveDirectories (id), tôi nghĩ lỗi chính là bạn đã không đề cập đến khóa chính cho id trong bảng ActiveDirectories


0

Trong tương lai.

ALTER TABLE Employees
ADD UserID int;

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.