web-dev-qa-db-fra.com

La valeur a violé les contraintes d'intégrité pour la colonne

J'essaie d'importer les données d'un fichier Excel dans la base de données SQL Server. Je suis incapable de le faire car je reçois des erreurs de suivi dans le fichier journal. S'il vous plaît aider. Les erreurs de journal sont les suivantes: -

[Destination de base de données OLE [42]] Erreur: Une erreur de base de données OLE est survenue. Code d'erreur: 0x80040E21. Un enregistrement de base de données OLE est disponible. Source: " Microsoft SQL Native Client "Résultat: 0x80040E21 Description:" Plusieurs étapes OLE Erreurs générées par l'opération de base de données. Vérifiez chaque OLE Valeur de l'état de la base de données, si disponible. Pas de travail. a été fait.".

[Destination OLE DB [42]] Erreur: Une erreur s'est produite avec la colonne d'entrée "Copie de F2" (5164) à l'entrée "Entrée de destination OLE DB" (55). L'état de la colonne renvoyé était: "La valeur violait les contraintes d'intégrité de la colonne.".

[Destination OLE DB [42]] Erreur: "l'entrée" Entrée de destination OLE DB "(55)" a échoué car un code d'erreur 0xC020907D s'est produit et la disposition de la ligne d'erreur sur "entrée" Entrée de destination OLE DB "(55)" indique une erreur. en cas d'erreur. Une erreur s'est produite sur l'objet spécifié du composant spécifié.

[DTS.Pipeline] Erreur: La méthode ProcessInput sur le composant "Destination OLE DB" (42) a échoué avec le code d'erreur 0xC0209029. Le composant identifié a renvoyé une erreur de la méthode ProcessInput. L'erreur est spécifique au composant, mais l'erreur est fatale et entraînera l'arrêt de la tâche de flux de données.

[DTS.Pipeline] Erreur: le thread "WorkThread0" s'est arrêté avec le code d'erreur 0xC0209029.

[Excel Source [174]] Erreur: la tentative d'ajout d'une ligne au tampon de la tâche de flux de données a échoué avec le code d'erreur 0xC0047020.

[DTS.Pipeline] Erreur: La méthode PrimeOutput sur le composant "Source Excel" (174) a renvoyé le code d'erreur 0xC02020C4. Le composant a renvoyé un code d'échec lorsque le moteur de pipeline a appelé PrimeOutput (). La signification du code d'échec est définie par le composant, mais l'erreur est fatale et le pipeline a cessé de s'exécuter.

38
user2840167

Cela se produit généralement lorsque l'option Autoriser Nulls n'est pas cochée.

Solution:

  1. Regardez le nom de la colonne pour cette erreur/avertissement.
  2. Allez sur SSMS et trouvez la table
  3. Autoriser Null pour cette colonne
  4. Sauver la table
  5. Relancez le SSIS

Essayez ces étapes. Cela a fonctionné pour moi.

Voir ce lien

57
Faizan Mubasher

Supprimer lignes vides à partir d'Excel après la dernière ligne de données!

Parfois, les lignes vides dans Excel sont toujours considérées comme des données. Par conséquent, essayer de les importer dans une table avec une ou plusieurs colonnes non nullables viole les contraintes de la colonne.

Solution: sélectionnez toutes les lignes vides de votre feuille, même celles situées après la dernière ligne de données, puis cliquez sur Supprimer les lignes.

Évidemment, si certaines de vos données ne suppriment vraiment aucune des contraintes de votre table, corrigez-les simplement pour qu'elles correspondent aux règles de votre base de données.

27
Striver

En guise d'alternative légère à la réponse de @ FazianMubasher, au lieu d'autoriser NULL pour la colonne spécifiée (ce qui peut ne pas être possible pour de nombreuses raisons), vous pouvez également ajouter un division conditionnelle Tâche à brancher NULL valeurs dans un fichier d'erreur, ou tout simplement pour les ignorer:

enter image description here

enter image description here

9
Sheridan

C'est comme le message d'erreur dit "La valeur a violé les contraintes d'intégrité pour la colonne" pour la colonne "Copie de F2"

Faites-le pour qu'il ne viole pas la valeur de la table cible. Quelles sont les valeurs autorisées, les types de données, etc., ne sont pas fournis dans votre question; nous ne pouvons donc pas être plus précis dans la réponse.

Pour répondre au vote négatif, non, vraiment c'est comme il est dit: vous mettez quelque chose dans une colonne qui n'est pas autorisée. Cela pourrait être souligné par Faizan, que vous mettez un NULL dans une colonne NOT NULLable, mais que cela pourrait être un hôte complet de autres choses et comme l'affiche originale n'a jamais fourni de mise à jour, il nous reste à deviner. Existe-t-il une contrainte de clé étrangère que l'insert a violée? Peut-être qu'une contrainte de vérification a été supprimée? Peut-être que la colonne source dans Excel a une valeur de date valide pour Excel qui n'est pas valide pour le type de données date/heure de la colonne cible.

Ainsi, à part des informations concrètes, la meilleure réponse possible est "ne faites pas ce qui la casse". Dans ce cas, quelque chose à propos de "Copie de F2" est mauvais pour la colonne cible. Donnez-nous les définitions de table, les valeurs fournies, etc. , puis vous pouvez obtenir des réponses spécifiques.

Dire aux gens de transformer une colonne NOT NULLable en une colonne NULLable pourrait être la bonne réponse. C'est peut-être aussi la réponse la plus horrible que l'homme connaisse. Si un processus existant s'attend à ce qu'il y ait toujours une valeur dans la colonne "Copie de F2", le fait de changer la contrainte en NULL peut causer des ravages sur les requêtes existantes. Par exemple

SELECT * FROM ArbitraryTable AS T WHERE T.[Copy of F2] = '';

Actuellement, cette requête récupère tout ce qui a été importé car Copy of F2 est un indicateur d’état mal nommé. Ces données doivent être introduites dans le système suivant pour que ... les factures puissent être payées. Dès que vous faites en sorte que les lignes non traitées puissent avoir une valeur NULL, la requête ci-dessus ne le satisfait plus. Les factures ne sont pas payées, les collections repeuplent votre immeuble et vous êtes maintenant au chômage, tout cela parce que vous n'avez pas fait d'analyse d'impact, etc., etc.

7
billinkc

La table ou la vue Teradata stocke NULL sous la forme "?" et SQL le considère comme un caractère ou une chaîne. C’est la principale raison de l’erreur "La valeur violait les contraintes d’intégrité de la colonne." lorsque les données sont transférées de la source Teradata vers la destination SQL. Solution 1: laissez la table de destination contenir NULL Solution 2: convertissez le '?' caractère à stocker en tant que valeur dans la table de destination.

1
Mohammed Sadiq

J'ai constaté que cela pouvait arriver pour diverses raisons.

Dans mon cas, lorsque je fais défiler jusqu'à la fin du rapport d'importation "Rapport", sous l'en-tête "Post-execute (Success)", il me dira combien de lignes ont été copiées et c'est généralement la ligne suivante qui pose problème. Vous pouvez également indiquer la colonne à l'aide des messages d'importation (dans votre cas, il s'agissait de "Copie de F2"), ce qui vous permet généralement de déterminer la cellule incriminée dans Excel.

J'ai vu cela se produire pour des raisons très stupides, telles que le format de date dans Excel étant différent des lignes précédentes. Par exemple, la cellule A2 correspond à "05/02/2017", tandis que A3 correspond à "05/05/2017" ou même "05-02-2017". Il semble que l’importation veuille que les choses soient parfaitement cohérentes.

Cela se produit même si les formats Excel sont différents. Ainsi, si B2 correspond à "512" mais à un format Excel "Number" et B3 à "512" mais à un format Excel "Texte", la cellule provoquera une erreur.

Il est également arrivé que je supprime littéralement toutes les lignes "vides" situées sous les lignes de données de la feuille Excel. Parfois, ils semblent vides mais Excel considère qu’ils ont des données "vierges" ou quelque chose du genre, de sorte que l’importation essaie de les importer également. Cela se produit généralement si vous avez dans votre feuille Excel des données précédentes que vous avez effacées mais que vous n'avez pas supprimées correctement.

Et puis, il y a les raisons évidentes d'essayer d'importer une valeur de texte dans une colonne entière ou d'insérer une valeur NULL dans une colonne NOT NULL comme indiqué par les autres.

1
frezq

Vous pouvez remplacer les valeurs "null" à partir du fichier & champ/colonne d'origine.

0
RaRdEvA