web-dev-qa-db-fra.com

Comment résoudre l'erreur Msg 547, niveau 16, état 0, ligne 1

Veuillez me suggérer comment résoudre l'erreur Comment résoudre l'erreur

Msg 547, niveau 16, état 0, ligne 1
L'instruction ALTER TABLE était en conflit avec la contrainte FOREIGN KEY "MyForeignKeyName". Le conflit s'est produit dans la base de données "MyDatabase", table "dbo.MyTable", colonne 'IMyColumn'.

6
rohan

Si vous essayez de créer une clé étrangère et que votre table enfant contient déjà des données qui ne correspondent pas à votre table parent, vous obtiendrez ce message d'erreur.

Par exemple:

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

Voir le dernier enregistrement de la table MyChild dont la valeur dans Job_Id est 5, qui n'est pas dans la table MyParent.

Si vous essayez de créer une relation de clé étrangère comme:

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

Le message d'erreur que vous obtiendrez:

Msg 547, niveau 16, état 0, ligne 1 L'instruction ALTER TABLE était en conflit avec la contrainte FOREIGN KEY "fk_My_foreignKey". Le conflit s'est produit dans la base de données "ma base de données", table "dbo.MyParent", colonne 'Job_id'.

10
JP Chauhan