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 firebase database “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 🙁

Dans votre table dbo.Sup_Item_Cat , il a 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_helpdbo.Sup_Item_Cat ‘. Voir la colonne sur laquelle se trouve FK et la colonne de laquelle il fait référence. Vous insérez des données erronées.

Faites-moi savoir si vous avez besoin de quelque chose mieux expliqué!

J’ai eu ce problème moi-même, concernant le message d’erreur 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 pense 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, tout comme la création de tables de firebase database.

Bien que la réponse vérifiée soit correcte:

Mike M a écrit-

“Le fonctionnement d’un FK est qu’il ne peut pas avoir de valeur dans cette colonne qui ne se trouve pas dans la colonne de clé primaire de la table référencée.”

Ce qui manque à cette réponse, c’est simplement;

Vous devez d’abord créer la table contenant la clé primaire.

Une autre façon de le dire est:

Vous devez insérer des données dans la table parente, contenant la clé primaire, avant d’essayer d’insérer des données dans la table enfant contenant la clé étrangère.

En bref, beaucoup de didacticiels semblent faire fi de ce fait, de sorte que si vous deviez essayer vous-même et ne réalisiez pas qu’il y avait un ordre des opérations, vous obtiendriez 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 si loin. J’espère que cela a consortingbué à rendre la réponse cochée plus claire. Je sais que certains d’entre vous peuvent penser que ce genre de chose est assez direct et que l’ouverture d’un livre aurait répondu à cette question avant qu’elle ne soit publiée, mais la vérité est que tout le monde n’apprend pas de la même manière.

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 des données puissent être insérées, la valeur dans le champ de clé étrangère doit d’abord figurer dans l’autre table.

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 Books et Authors où Books a une contrainte de clé étrangère sur la table Authors et que vous essayez d’insérer un enregistrement de livre pour lequel il n’existe aucun enregistrement d’auteur.

Le problème n’est pas avec client_id de ce que je peux voir. Cela ressemble plus au problème avec 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 sûr que ce n’est pas celle que vous essayez de corriger. De plus, «123123» semble suspect.

Quelque chose que j’ai trouvé, c’est que tous les champs doivent correspondre exactement.

Par exemple, envoyer un chat n’est pas la même chose que l’envoi d’un chat.

Ce que j’ai fait pour résoudre ce problème consistait à écrire le code FK dans la table dans laquelle j’insérais des données, à prendre note de la “clé étrangère” qui contenait les contraintes (dans mon cas, il y en avait 2) et à vérifier EXACTEMENT comme ils étaient dans la table qui émettait l’erreur de contrainte FK.

Une fois que j’ai corrigé les 2 champs donnant mes problèmes, la vie était bonne!

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

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

Vérifiez les champs dans la relation pour laquelle la clé étrangère est définie. SQL Server Management Studio peut ne pas avoir les champs que vous souhaitez sélectionnés lorsque vous avez défini la relation. Cela m’a brûlé dans le passé.

  1. lancez sp_helpconstraint
  2. Faites attention à la colonne constraint_keys renvoyée pour la clé étrangère

Les données de la table parente n’existent pas et provoquent le problème. Pour le problème ci-dessus, les données ne sont pas disponibles dans la table dbo.Sup_Item_Cat ”

Les données de la table parent manquantes sont à l’origine du problème. Dans votre problème, la non disponibilité des données dans “dbo.Sup_Item_Cat” pose problème

J’ai rencontré le même problème lorsque j’ai utilisé des migrations en code unique pour créer ma firebase database pour une application MVC 5. J’ai finalement trouvé que la méthode d’amorçage dans mon fichier configuration.cs était à l’origine du problème. Ma méthode de démarrage 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.

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

Les requêtes de correspondance n’ont pas détecté qu’il y avait des tabulations et des espaces dans mon champ FK, mais INSERT les a reconnues et il a continué à 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 finalement détecté les tabs / espaces.

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