web-dev-qa-db-fra.com

SSIS ne peut pas convertir en raison d'une perte potentielle de données

J'ai un package SSIS qui importe d'un document Excel à une table de base de données. Je reçois les erreurs suivantes:

[Excel Source [1]] Error: There was an error with output column "ShipTo" (47) on output
"Excel Source Output" (9). The column status returned was: "The value could not be 
converted because of a potential loss of data.".

[Excel Source [1]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The
"output column "ShipTo" (47)" failed because error code 0xC0209072 occurred, and the
error row disposition on "output column "ShipTo" (47)" specifies failure on error. An
error occurred on the specified object of the specified component.  There may be error
messages posted before this with more information about the failure.

[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED.  The PrimeOutput method
on component "Excel Source" (1) returned error code 0xC0209029.  The component returned
a failure code when the pipeline engine called PrimeOutput(). The meaning of the
failure code is defined by the component, but the error is fatal and the pipeline 
stopped executing.  There may be error messages posted before this with more
information about the failure.

J'ai lu et trouvé des articles pour faire en sorte que mes types de données correspondent, et c'est ce que j'ai fait. Dans le document Excel, il y a 184 lignes et dans la colonne répertoriée dans ces erreurs (shipto), elles ont toutes la même valeur, à savoir "Tout". Je l'ai rencontré la dernière fois, mais comme il n'y avait que 4 lignes contenant "Tous", je viens d'entrer ces valeurs manuellement, mais cela ne sera pas très efficace cette fois-ci. 

Sur la table de destination, la colonne ShipTo est un Varchar (20), je ne vois donc pas la taille qui pose problème, c’est qu’il s’agit de l’une des trois choses suivantes: numéro à 1 chiffre, numéro à 2 chiffres ou mot Tous.

Est-ce que quelqu'un a des idées supplémentaires que je pourrais essayer? Toute aide est grandement appréciée. Merci à tous ceux qui peuvent apporter leur aide.

18
Joe W

Lorsque vous configurez ce package pour la première fois, je suppose qu'un numéro à un ou deux chiffres était la première valeur de la colonne ShipTo. La lecture de votre colis à partir d'Excel a sélectionné un type numérique pour ce champ de saisie et le mot "Tout" a échoué, car la spécification d'entrée de ce champ est numérique. Il existe plusieurs façons de résoudre ce problème à l’avance, mais la solution la plus simple consiste à cliquer avec le bouton droit de la souris sur la source Excel et à choisir Afficher l’éditeur avancé ... À partir de là, choisissez l’onglet intitulé Propriétés d’entrée et de sortie. Dans la partie supérieure de la section des entrées et des sorties de cette boîte de dialogue, recherchez la colonne ShipTo. Vous devrez creuser pour le trouver. Définissez le type de données sur "chaîne [DT_STR]" et la longueur sur 20.

Cliquez sur OK puis essayez à nouveau d'exécuter votre paquet.

24
William Salzman

Pour moi, je viens de supprimer la source de base de données OLE de SSIS et de l'ajouter à nouveau. Travaillé!

1
patricgh

J'ai eu le même problème, plusieurs valeurs de type de données dans une seule colonne, le package charge uniquement des valeurs numériques. Reste tout ce qu'il a mis à jour comme nul. 

Solution

Pour résoudre ce problème, le type de données Excel est l’une des solutions. Dans Excel Copiez les données de colonne et collez-les dans un autre fichier. Supprimez cette colonne et insérez une nouvelle colonne en tant que type de données Text et collez les données copiées dans une nouvelle colonne.

Désormais, dans le package ssis delete et recréer les tables source et source Excel, changez le type de colonne data en varchar.

Cela fonctionnera.

1

Ce n'est peut-être pas la meilleure méthode, mais vous pouvez ignorer l'erreur de conversion si tout le reste échoue. Mon problème était lié au fait que les valeurs null ne se convertissaient pas correctement. J'ai donc simplement ignoré l'erreur. Les dates sont entrées sous forme de dates et les valeurs null ont été définies sous forme de valeurs NULL. Il n'y a donc aucun problème de qualité des données. Pour ce faire, cliquez avec le bouton droit sur votre source, cliquez sur Modifier, puis sur Sortie d'erreur. Accédez à la colonne qui vous cause du chagrin et sous Erreur, définissez-la sur Ignorer l'échec.

0
Irena Sagan
0
Malik Aqib