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

j'essaie d'importer les données du fichier Excel dans la base de données du serveur SQL. Je ne peux pas le faire parce que je reçois les erreurs suivantes dans le fichier journal. S'il vous plaît aider. Le journal des erreurs sont comme suit:-

[OLE DB Destination [42]] erreur: une erreur OLE DB s'est produite. Code d'erreur: 0x80040E21. Un disque OLE DB est disponible. Source:" Microsoft SQL Native Client "Hresult: 0x80040E21 Description:" Multiple-step OLE DB operation generated errors. Vérifier chaque OLE DB valeur d'état, si disponible. Aucun travail n'a été fait.".

[OLE DB Destination [42]] erreur: il y avait une erreur avec la colonne d'entrée "copie de F2" (5164) sur l'entrée "OLE DB Destination Input" (55). L'état de la colonne retourné était: "la valeur a violé les contraintes d'intégrité pour la colonne.".

[OLE DB Destination [42]] erreur: la "saisie" OLE DB Destination Input "(55) "a échoué parce que le code d'erreur 0xC020907D s'est produit, et la disposition de la ligne d'erreur sur la" saisie "OLE DB Destination Input "(55) " spécifie un échec sur erreur. Une erreur s'est produite sur l'objet spécifié du composant spécifié.

[DTS.Erreur de Pipeline]: la méthode de traitement sur le composant "OLE DB Destination" (42) a échoué avec le code d'erreur 0xC0209029. La composante identifiée a retourné 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.Erreur De Pipeline]: Thread "WorkThread0" est sorti avec le code d'erreur 0xC0209029.

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

[DTS.Erreur de Pipeline]: la méthode PrimeOutput sur le composant "Excel Source" (174) renvoie le code d'erreur 0xC02020C4. Le composant a retourné un code de défaillance lorsque le moteur du pipeline a appelé PrimeOutput(). La signification du code d'erreur est défini par le composant, mais l'erreur est fatal et le pipeline s'est arrêté.

32
demandé sur billinkc 2013-10-03 00:11:29

6 réponses

C'est généralement le cas lorsque Autoriser Les Valeurs Null l'option n'est pas cochée.

Solution:

  1. Regarder le nom de la colonne pour cette erreur/d'avertissement.
  2. allez à SSMS et trouvez la table
  3. Autoriser les valeurs Null pour que la Colonne
  4. Enregistrer la table
  5. exécutez à nouveau la SSIS

Essayez ces étapes. Il a travaillé pour moi.

Voir ce lien

52
répondu Faizan Mubasher 2014-10-01 05:14:56

Supprimer des lignes vides D'Excel après votre dernière ligne de données!

parfois les lignes vides dans Excel sont encore considérées comme des données, donc essayer de les importer dans une table avec une ou plusieurs colonnes non nulles viole les contraintes de la colonne.

Solution: sélectionnez Toutes les lignes vides de votre feuille, même celles qui suivent votre dernière ligne de données, et cliquez sur Supprimer les lignes.

Évidemment, si certaines de vos données n'a vraiment vioalte l'une des contraintes de votre table, puis il suffit de corriger vos données pour correspondre aux règles de votre base de données..

19
répondu Striver 2016-01-29 09:15:55

comme une légère alternative à la réponse de @FazianMubasher, au lieu de permettre NULL pour la colonne spécifiée( ce qui peut ne pas être possible pour de nombreuses raisons), vous pouvez aussi ajouter un Split Conditionnel tâche à la branche NULL valeurs vers un fichier d'erreur, ou tout simplement pour les ignorer:

enter image description here

enter image description here

8
répondu Sheridan 2015-01-08 14:56:18

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"

Faire de sorte qu'il n'enfreint pas la valeur dans la table cible. Les valeurs permises, les types de données, etc. ne sont pas indiqués dans votre question, donc nous ne pouvons pas être plus précis dans nos réponses.

pour aborder la note descendante, non, vraiment c'est comme il est dit: vous mettez quelque chose dans une colonne qui n'est pas autorisé. être Faizan fait remarquer, que vous mettez un NULL dans une colonne non NULLable, mais il pourrait être un hôte entier de autres les choses et comme l'affiche originale n'a jamais fourni aucune mise à jour, nous sommes laissés à deviner. Y avait-il une contrainte de clé étrangère que l'insert violé? Peut-être qu'il y a une contrainte de chèque qui s'est envolé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.

vous pouvez de réponses précises.

dire aux gens de transformer une colonne qui N'est pas nulle en une colonne qui est nulle pourrait être la bonne réponse. C'est peut-être aussi la réponse la plus horrible connue de l'humanité. Si un processus existant s'attend à ce qu'il y ait toujours une valeur dans la colonne "copie de F2" la contrainte à NULL peut faire 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é fraîchement importé car Copy of F2 est un indicateur de statut mal nommé. Ces données doivent être introduites dans le prochain système... les factures peuvent être payées. Dès que vous faites en sorte que les lignes non traitées puissent avoir une valeur nulle, la requête ci-dessus ne satisfait plus cela. Les factures ne sont pas payées, les recouvrements repos votre bâtiment et maintenant vous êtes hors d'un travail, tous parce que vous n'avez pas fait d'analyse d'impact, etc.

7
répondu billinkc 2014-12-04 15:35:30

Teradata table ou view stores NULL as"?"et SQL le considère comme un caractère ou une chaîne. C'est la principale raison de l'erreur "La valeur a violé les contraintes d'intégrité pour la colonne." quand les données sont portées de Teradata source à SQL destination. Solution 1: permettre à la table de destination de contenir NULL Solution 2: convertir le '?'le caractère doit être stocké comme une certaine valeur dans la table de destination.

1
répondu Mohammed Sadiq 2016-08-17 13:06:04

j'ai constaté que cela peut se produire pour un certain nombre de raisons diverses.

dans mon cas, quand je fais défiler JUSQU'à la fin de L'import de SQL "Report", sous la rubrique "Post-execute (Success)" il me dira combien de lignes ont été copiées et c'est habituellement la ligne suivante dans la feuille qui a le problème. Aussi vous pouvez dire quelle colonne par les messages d'importation (dans votre cas c'était "copie de F2") de sorte que vous pouvez généralement trouver quelle était la cellule incriminée dans Excel.

j'ai vu ce se produisent pour des raisons très stupides telles que le format de date dans Excel étant différent que les lignes précédentes. Par exemple la cellule A2 étant "05/02/2017" tandis que A3 étant "5/2/2017" ou même "05-02-2017". Il semble que l'importation veut que les choses soient parfaitement cohérentes.

cela se produit même si les formats Excel sont différents, donc si B2 est" 512 "mais un format Excel" Number "et B3 est" 512 "mais un format Excel" Text", alors la cellule causera une erreur.

j'ai aussi eu des situations où je j'ai littéralement dû supprimer toutes les lignes "vides" sous mes lignes de données dans la feuille Excel. Parfois, ils semblent vides, mais Excel les considère comme ayant des données" Vierges " ou quelque chose comme ça, donc l'import essaie de les importer aussi. Cela se produit généralement si vous avez eu des données précédentes dans votre feuille Excel que vous avez effacées mais n'avez pas correctement supprimé les lignes.

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 un NULL dans un non NULL colonne mentionnée par les autres.

1
répondu frezq 2017-12-19 09:45:20