web-dev-qa-db-ja.com

エラーメッセージ547、レベル16、状態0、行1の解決方法

エラーの解決方法を教えてくださいエラーの解決方法

メッセージ547、レベル16、状態0、行1
ALTER TABLEステートメントがFOREIGN KEY制約「MyForeignKeyName」と競合しました。データベース「MyDatabase」、テーブル「dbo.MyTable」、列「IMyColumn」で競合が発生しました。

6
rohan

外部キーを作成しようとしていて、子テーブルに親テーブルと一致しないデータがすでにある場合、このエラーメッセージが表示されます。

例:

CREATE TABLE MyParent(Job_id int PRIMARY KEY,Job_Name Varchar(50));

INSERT INTO MyParent Values(1,'CEO');
INSERT INTO MyParent Values(2,'Business Manager');
INSERT INTO MyParent Values(3,'DBA');

CREATE TABLE MyChild(Emp_id int,Emp_Name Varchar(50),Job_Id int)

INSERT INTO MyChild Values(1,'Lavanya',1);
INSERT INTO MyChild Values(1,'JP Chauhan',3);
INSERT INTO MyChild Values(1,'Rakesh',5);

Job_Idに値が5であるMyChildテーブルの最後のレコードが5であることを確認します。これはMyParentテーブルにはありません。

次のような外部キー関係を作成しようとすると、

ALTER TABLE MyChild
ADD CONSTRAINT fk_My_foreignKey FOREIGN KEY(Job_Id)REFERENCES MyParent(Job_Id);

表示されるエラーメッセージ:

メッセージ547、レベル16、状態0、行1 ALTER TABLEステートメントがFOREIGN KEY制約 "fk_My_foreignKey"と競合しました。データベース "mydatabase"、テーブル "dbo.MyParent"、列 'Job_id'で競合が発生しました。

10
JP Chauhan