SQL既存の列への外部キーの追加


110

SQL Server 2008で次のSQLコマンドを使用して、外部キー制約でテーブルを更新する場合:

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

UserIDEmployeesテーブルの私のFK列です。テーブルUserIDでを参照しようとしていActiveDirectoriesます。私はこのエラーを受け取ります:

外部キー 'UserID'は、参照テーブル 'Employees'の無効な列 'UserID'を参照しています。


1
2つのテーブルのスキーマを提供できますか?
ステファン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を作成し、構築する前に関係を確立するのには理由があります。1つのテーブルにレコードが多すぎるため、他のテーブルとの関係を作成しようとしてエラーが発生しました。皆さんありがとう。
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

列がテーブルとテーブルで呼び出さIDれている可能性がありますか?EmployeesUserIDActiveDirectories

次に、コマンドは次のようになります。

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

1
私はその奇妙なことを知っていますが、残念なことにActiveDirectoryテーブルIDの名前
ExceptionLimeCat

5

MySQL / SQL Server / Oracle / MS Access:

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

FOREIGN KEY制約の命名を許可し、複数の列にFOREIGN KEY制約を定義するには、次のSQL構文を使用します。

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
答えを説明してください
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.