SQL 기존 열에 외래 키 추가


110

SQL Server 2008에서 다음 SQL 명령을 사용하여 외래 키 제약 조건이있는 테이블을 업데이트하는 경우 :

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

UserIDEmployees테이블 에서 내 FK 열이됩니다 . UserIDActiveDirectories테이블 에서 참조하려고 합니다. 이 오류가 발생합니다.

외래 키 'UserID'가 참조하는 테이블 'Employees'에서 잘못된 열 'UserID'를 참조합니다.


1
두 테이블의 스키마를 제공 할 수 있습니까?
Stefan H

이 링크를 참조하십시오. stackoverflow.com/questions/35196951/…
Jigar Darji

답변:


191

오류는 Employees 테이블에 UserID 열이 없음을 나타냅니다. 먼저 열을 추가 한 다음 문을 다시 실행하십시오.

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

맞았어요. DB가 추가 열을 업데이트하지 않았습니다. 이것은 해결되었지만 우리 칼럼이 설정되어 있지는 않지만 여전히 제약 조건을 추가 할 수 없습니다. 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 테이블에서 PRIMARY KEY 또는 후보 키로 정의되지 않은 것처럼 보입니다.
BluesRockAddict 2012

예,하지만 ActiveDirectories 테이블의 PK입니다
ExceptionLimeCat

1
해결 : ERD를 만들고 구축하기 전에 관계를 설정하는 데에는 이유가 있습니다. 한 테이블에 너무 많은 레코드가있어서 다른 테이블과의 관계를 생성하는 데 오류가 발생했습니다. 모두 감사합니다.
ExceptionLimeCat

이 링크를 참조하십시오. stackoverflow.com/questions/35196951/…
Jigar Darji

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

그것은 열이라는 것을 할 수 IDEmployees테이블과 UserIDActiveDirectories테이블?

그러면 명령은 다음과 같아야합니다.

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

1
내가 알고있는 그 이상한 그러나 불행하게도 액티브 디렉토리 테이블 ID의 이름
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)에 대한 외래 키 생성 방법이 정확합니다. 주된 실수는 ActiveDirectories 테이블에서 id에 대한 기본 키를 언급하지 않았다는 것입니다.


0

미래에.

ALTER TABLE Employees
ADD UserID int;

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.