312 votes

L'instruction INSERT est en conflit avec la contrainte de clé étrangère - SQL Server

Msg 547, Niveau 16, État 0, Ligne 1
L'instruction INSERT a été en conflit avec la contrainte de clé étrangère "FK_Sup_Item_Sup_Item_Cat". Le conflit s'est produit dans la base de données "dev_bo", la table "dbo.Sup_Item_Cat". L'instruction a été annulée.

insert into sup_item (supplier_id, sup_item_id, name, sup_item_cat_id, 
                      status_code, last_modified_user_id, last_modified_timestamp, client_id)   
values (10162425, 10, 'jaiso', '123123',
        'a', '12', '2010-12-12', '1062425')

La dernière colonne client_id provoque l'erreur. J'ai essayé de mettre la valeur qui existe déjà dans la table dbo.Sup_Item_Cat dans la colonne correspondant à l'élément sup.

30 votes

Vous avez essayé d'insérer un enregistrement dans votre table d'articles qui n'a pas de correspondance avec un enregistrement de catégorie dans votre table Sup_Item_Cat.

1 votes

Donc vous dites que SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id = '123123' renvoie des résultats?

2 votes

Aussi vous dites "la dernière colonne"client_id" je rencontre un conflit." Ce n'est pas ce que le message d'erreur implique. Je pense que vous cherchez au mauvais endroit pour votre problème.

373voto

Mike M. Points 581

Votre table dbo.Sup_Item_Cat a une référence de clé étrangère vers une autre table. Le fonctionnement d'une clé étrangère est qu'elle ne peut pas avoir une valeur dans cette colonne qui n'est pas également dans la colonne de clé primaire de la table référencée.

Si vous avez SQL Server Management Studio, ouvrez-le et exécutez sp_help 'dbo.Sup_Item_Cat'. Voyez sur quelle colonne se trouve cette clé étrangère, et quelle colonne de quelle table elle fait référence. Vous insérez des données erronées.

11 votes

Merci d'avoir inclus la commande sp_help! Cela m'a aidé à cerner mon problème similaire.

0 votes

En effet - dans mon cas, la propriété n'était tout simplement pas renvoyée de la vue vers le contrôleur, donc elle était toujours à 0 (ce qui n'était pas un identifiant valide, mais le contrôleur n'aurait aucun moyen de le savoir.)

8 votes

Alt + F1 est un raccourci pour sp_help, pour les lecteurs futurs, sélectionnez la table et appuyez sur alt + f1

215voto

plasmasnakeneo Points 111

La réponse sur cette page par Mike M. est correcte:

La façon dont une clé étrangère fonctionne est qu'elle ne peut pas avoir une valeur dans cette colonne qui n'est pas également dans la colonne de clé primaire de la table référencée.

Ce qui manque dans cette réponse est : Vous devez d'abord construire la table contenant la clé primaire.

Vous devez insérer des données dans la table parent contenant la clé primaire avant de tenter d'insérer des données dans la clé étrangère.

Après avoir ajouté les données de la clé primaire, vos données de clé étrangère dans la table enfant doivent être conformes au champ de clé primaire dans la table parent.

1 votes

Et je voudrais ajouter, assurez-vous de profiler votre requête car elle n'envoie pas toujours ce que vous pensez devoir être envoyé à la base de données.

56voto

Matthew Smith Points 469

Vous essayez d'insérer un enregistrement avec une valeur dans la colonne de clé étrangère qui n'existe pas dans la table étrangère.

Par exemple: Si vous avez des tables Livres et Auteurs où Livres a une contrainte de clé étrangère sur la table Auteurs et que vous essayez d'insérer un enregistrement de livre pour lequel il n'existe pas d'enregistrement d'auteur.

0 votes

Ne pourrait pas être plus simple. Merci mec. Cheers

22voto

Justin Niessner Points 144953

Cette erreur signifie que la table dans laquelle vous insérez des données a une relation de clé étrangère avec une autre table. Avant d'insérer des données, la valeur dans le champ de clé étrangère doit d'abord exister dans l'autre table.

7voto

Donnie Points 17312

Cela signifie exactement ce qu'il dit. Vous essayez d'insérer une valeur dans une colonne qui a une contrainte FK qui ne correspond à aucune valeur dans la table de recherche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X