web-dev-qa-db-fra.com

Instruction INSERT en conflit avec la contrainte FOREIGN KEY - SQL Server

Je reçois l'erreur suivante. Pourrais-tu m'aider s'il te plaît?

Msg 547, niveau 16, état 0, ligne 1
L'instruction INSERT était 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é terminé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 le dbo.Sup_Item_Cat dans la colonne, correspondant au sup_item .. mais pas de joie :-(

203
SmartestVEGA

Dans votre table dbo.Sup_Item_Cat, il contient une référence de clé étrangère à une autre table. Le fonctionnement d'un FK est qu'il ne peut pas avoir de valeur dans cette colonne qui ne figure 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 sp_help 'dbo.Sup_Item_Cat'. Voir quelle colonne se trouve sur FK et quelle colonne de quelle table il fait référence. Vous insérez des données erronées.

Faites-moi savoir si vous avez besoin d'explications mieux expliquées!

257
Mike M.

J'ai moi-même eu ce problème concernant le message d'erreur reçu en essayant de renseigner 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, j'estime que la réponse est un peu incomplète pour les personnes moins familiarisées avec SQL. Je suis assez apte à écrire du code mais les requêtes SQL sont nouvelles pour moi ainsi que la construction de tables de base de données.

Bien que la réponse cochée soit correcte:

Mike M a écrit-

"Le fonctionnement d'un FK est qu'il ne peut pas avoir dans cette colonne de valeur qui ne soit pas également dans la colonne de clé primaire de la table référencée."

Ce qui manque à cette réponse est simplement;

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

Une autre façon de le dire est;

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 table enfant contenant la clé étrangère.

En bref, de nombreux tutoriels semblent glaner ce fait, de sorte que si vous essayez par vous-même et ne réalisez pas qu'il existe un ordre des opérations, vous obtiendrez 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 être conformes au champ de clé primaire de la table parent, sinon vous obtiendrez toujours cette erreur.

Si quelqu'un lit jusque-là. J'espère que cela a aidé à rendre la réponse cochée plus claire. Je sais que certains d’entre vous pensent peut-être que ce genre de chose est assez simple et qu’ouvrir un livre aurait répondu à cette question avant sa publication, mais la vérité est que tout le monde n’apprend pas de la même façon.

119
plasmasnakeneo

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 dans lesquelles Livres a une contrainte de clé étrangère sur la table Auteurs et que vous essayez d'insérer une notice de livre pour laquelle il n'y a aucune notice d'auteur.

20
Matthew Smith

Vous devrez poster votre déclaration pour plus de précisions. Mais...

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 que les données puissent être insérées, la valeur dans le champ clé étrangère must existe d'abord dans l'autre table.

14
Justin Niessner

J'ai découvert que tous les champs devaient correspondre EXACTEMENT.

Par exemple, envoyer "chat chien" n'est pas la même chose que "catdog".

Ce que j'ai fait pour résoudre le problème, c’est d’écrire le code FK de la table dans laquelle je suis en train d’insérer des données, de prendre note de la "Clé étrangère" qui comportait les contraintes (dans mon cas, il y en avait 2) et de s’assurer que les 2 champs correspondent aux valeurs EXACTEMENT comme ils é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 belle!

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

5
John Waclawski

Le problème n'est pas avec client_id d'après ce que je peux voir. Il semble que le problème concerne plutôt la 4ème colonne, sup_item_cat_id

Je courrais

sp_helpconstraint sup_item

et faites attention à la colonne constraint_keys renvoyée pour la clé étrangère FK_Sup_Item_Sup_Item_Cat 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ésoudre. En plus, 123123 semble suspect.

5
Cobusve

Cela signifie exactement ce que cela dit. Vous tentez d'insérer une valeur dans une colonne contenant une contrainte FK qui ne correspond à aucune valeur de la table de recherche.

3
Donnie

Le manque de données dans la table parent est la cause du problème. Dans votre problème non-disponibilité des données dans "dbo.Sup_Item_Cat" provoque le problème

2
sathish
  1. lancez sp_helpconstraint
  2. payer l'ATTENTION à la colonne constraint_keys renvoyée pour la clé étrangère
2
dotnet

Revérifiez les champs de la relation pour laquelle la clé étrangère est définie. SQL Server Management Studio n'a peut-être pas sélectionné les champs souhaités lors de la définition de la relation. Cela m'a brûlé dans le passé.

2
user1424678

J'ai eu le même problème lorsque j'ai utilisé les migrations code-first pour construire ma base de données pour une application MVC 5. J'ai finalement trouvé la méthode de départ dans mon fichier configuration.cs à l'origine du problème. Ma méthode de base consistait à créer 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.

1
Paulie22

J'ai aussi la même erreur dans mon code SQL, cette solution fonctionne pour moi,


Vérifier les données dans la table primaire Peut-être que vous entrez une valeur de colonne qui n'est pas présente dans la colonne de clé primaire.

1
Chandan Kumar

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

Les requêtes de correspondance ne détectaient pas d'onglets et d'espaces dans mon champ FK, mais l'INSERT les reconnaissait et continuait à générer l'erreur.

J'ai testé à nouveau 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 j'ai 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 ça aide quelqu'un!

1
mns