2010-06-03 7 views
151

Je reçois l'erreur suivante. Pourrais-tu m'aider s'il te plaît?Instruction INSERT en conflit avec la contrainte FOREIGN KEY

Msg 547, niveau 16, état 0, Ligne 1
L'instruction INSERT en conflit avec la contrainte FOREIGN KEY "FK_Sup_Item_Sup_Item_Cat". Le conflit s'est produit dans la base de données "dev_bo", table "dbo.Sup_Item_Cat". La déclaration a été résiliée.

code:

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 est à l'origine de l'erreur. J'ai essayé de mettre la valeur qui existe déjà dans la dbo.Sup_Item_Cat dans la colonne correspondant à la sup_item .. mais pas de joie :-(

+10

Vous avez essayé d'insérer un enregistrement dans votre table d'articles qui n'a pas d'enregistrement de catégorie correspondant dans votre table 'Sup_Item_Cat'. Pas grand chose d'autre à dire à ce sujet. –

+1

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

+2

Aussi vous dites "le dernier coulum" client_id "je suis en conflit." Ce n'est pas ce que le message d'erreur implique Je pense que vous cherchez au mauvais endroit pour votre problème. –

Répondre

185

Dans votre table dbo.Sup_Item_Cat, il contient une référence de clé étrangère à une autre table. La façon dont un FK fonctionne est qu'il ne peut pas avoir une valeur dans cette colonne qui n'est pas aussi dans la colonne de clé primaire de la table référencée. Si vous avez SQL Server Management Studio, ouvrez-le et sp_help 'dbo.Sup_Item_Cat'. Voir la colonne sur laquelle FK se trouve, et de quelle colonne il fait référence. Vous insérez de mauvaises données. Faites-moi savoir si vous avez besoin de mieux expliqué quoi que ce soit!

+4

Merci d'inclure la commande sp_help! M'a aidé à affiner mon problème similaire. –

+0

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

4

Cela signifie exactement ce qu'il dit. Vous essayez d'insérer une valeur dans une colonne qui a une contrainte FK sur ce qui ne

14

correspond à aucune valeur dans la table de recherche. vous devez poster votre déclaration pour plus de précisions. Mais ...

cette erreur signifie que la table vous insérer des données dans une relation de clé étrangère avec une autre table Avant de pouvoir insérer des données, la valeur dans le champ clé étrangère doit être dans l'autre table premier.

14

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 aucun enregistrement d'auteur.

Par ailleurs, une simple recherche sur Google auriez-vous donné la réponse ...

+0

ma question éditée – SmartestVEGA

+2

@Iain qui a édité ma dernière phrase dehors. Je l'ai remis. La dernière déclaration n'est pas "snark", c'est un lien utile vers une recherche Google qui aurait renvoyé la réponse que le PO recherchait. Je crois toujours à "enseigner à quelqu'un à pêcher". Un léger rappel pour devenir autosuffisant pourrait avoir un impact positif sur le PO, les lecteurs et ce site. À mon humble avis, il est toujours préférable d'épuiser ses propres recherches avant de demander à quelqu'un d'autre de passer son temps à répondre à votre question. Le fait que cette question arrive maintenant en tête de la recherche Google n'est pas pertinent. –

6

Le problème n'est pas client_id de ce que je peux voir. Il ressemble plus le problème est avec la 4ème colonne, sup_item_cat_id

Je courrais

sp_helpconstraint sup_item 

et attention à la colonne constraint_keys est revenu pour la FK_Sup_Item_Sup_Item_Cat clé étrangère pour confirmer quelle colonne est le problème réel, mais Je suis à peu près sûr que ce n'est pas celui que vous essayez de réparer. En plus de "123123" semble suspect aussi bien.

3

Vérifiez les champs dans la relation pour laquelle la clé étrangère est définie. Il se peut que SQL Server Management Studio n'ait pas sélectionné les zones que vous vouliez sélectionner lors de la définition de la relation. Cela m'a brûlé dans le passé.

81

J'ai eu ce problème moi-même, en ce qui concerne le message d'erreur qui est reçu en essayant de remplir un champ de clé étrangère. Je me suis retrouvé sur cette page dans l'espoir de trouver la réponse. La réponse cochée sur cette page est en effet la bonne, malheureusement je trouve que la réponse est un peu incomplète pour des gens qui ne sont pas aussi familiers avec SQL. Je suis assez apte à l'écriture de code, mais les requêtes SQL sont nouvelles pour moi ainsi que la construction de tables de base de données.

Malgré la réponse vérifiée étant correcte:

Mike M écrivait:

« La façon dont FK fonctionne est qu'il ne peut pas avoir une valeur dans cette colonne qui est pas aussi dans la clé primaire colonne de la table référencée. "

Ce qui manque à cette réponse est simplement;

Vous devez construire la table contenant la clé primaire d'abord.

Une autre façon de le dire est;

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

En bref, la plupart des tutoriels semblent être sur vitrerie ce fait de sorte que si vous deviez essayer sur votre propre et ne savais pas qu'il y avait un ordre d'opérations, alors vous obtenez cette erreur. Naturellement, après l'ajout des données de clé primaire, vos données de clé étrangère dans la table enfant doivent se conformer au champ de clé primaire dans la table parent, sinon vous obtiendrez toujours cette erreur.

Si quelqu'un a lu jusqu'ici. J'espère que cela a aidé à rendre la réponse vérifiée plus claire. Je sais que certains d'entre vous ont peut-être l'impression que ce genre de chose est assez avancé et que l'ouverture d'un livre aurait répondu à cette question avant qu'elle soit publiée, mais la vérité est que tout le monde n'apprend pas de la même manière.

+0

ET je voudrais ajouter, assurez-vous de profiler votre requête car elle n'envoie pas toujours ce que vous pensez qu'il devrait être à la base de données. – HLGEM

+0

Merci pour la simplicité ... –

2
  1. run sp_helpconstraint
  2. prêtons attention à la colonne constraint_keys retourné pour la clé étrangère
2

J'ai eu le même problème quand je migrations de code-première à construire ma base de données pour une application MVC 5. J'ai finalement trouvé la méthode seed dans mon fichier configuration.cs à l'origine du problème. Ma méthode d'amorçage créait une entrée de table pour la table contenant la clé étrangère avant de créer l'entrée avec la clé primaire correspondante.

6

Quelque chose que j'ai trouvé était que tous les champs doivent correspondre EXACTEMENT. Par exemple, l'envoi de «chat» n'est pas la même chose que l'envoi de «chat».Ce que j'ai fait pour résoudre ce problème était d'écrire le code FK depuis la table dans laquelle j'insérais les données, de prendre note de la "clé étrangère" qui avait les contraintes (dans mon cas il y en avait 2) et de m'assurer 2 valeurs de champs correspondaient EXACTEMENT comme elles étaient dans la table qui lançait l'erreur FK Constraint.

Une fois que j'ai réparé les 2 champs donnant mes problèmes, la vie était bonne!

Si vous avez besoin d'une meilleure explication, faites le moi savoir.

+0

Cela m'a vraiment aidé haha! Vu ce fait, corrigé un problème que j'avais! Merci –

3

données de la table parent existent pas, il provoque la problem.For la question ci-dessus, les données ne sont pas disponibles dans le tableau dbo.Sup_Item_Cat »

+1

Comment votre réponse, bien qu'elle ne soit pas fausse, apporte-t-elle des informations supplémentaires qui ne sont pas déjà incluses dans d'autres réponses? Veuillez essayer de répondre aux messages lorsque vous pouvez avoir des arguments valides qui n'ont pas encore été entièrement couverts par d'autres réponses. –

3

données table parent manquant provoque le problème. Dans votre problème non disponibilité de données dans "dbo.Sup_Item_Cat" provoque le problème

2

J'ai rencontré ce problème lorsque mes champs de valeur d'insertion contenaient des onglets et des espaces qui n'étaient pas évidents à l'œil nu.J'ai créé ma liste de valeurs dans Excel, copié, et collé à SQL, et exécuter des requêtes pour trouver les non-correspondances sur mes champs FK

Les requêtes de correspondance n'ont pas détecté la présence d'onglets et d'espaces dans mon champ FK, mais l'INSERT les a reconnues et a continué à générer l'erreur.

J'ai de nouveau testé en copiant le contenu du champ FK dans un enregistrement et en le collant dans la requête d'insertion. Lorsque cet enregistrement a également échoué, j'ai regardé de plus près les données et finalement détecté les onglets/espaces.

Une fois que j'ai nettoyé les onglets/espaces supprimés, mon problème a été résolu. J'espère que cela aide quelqu'un!

Questions connexes