La valeur n'a pas pu être convertie en raison d'une perte potentielle de données [fermé]


12

Permettez-moi de commencer par clarifier qu'il ne s'agit pas d'une question en double , ni d'un doublon potentiel d'ailleurs. J'ai essayé d'implémenter chaque réponse à chaque variante qui existe déjà de ce problème sur StackOverflow et DBA Stack Exchange, sans aucune chance.

J'ai eu du mal avec ce problème au cours des deux derniers jours (en travaillant dessus environ 7 heures par jour), et même après avoir recherché le problème sur Google, il semble que personne d'autre n'ait la même variante exacte de mon problème.

Qu'est-ce que j'essaye de faire?

Dans SSIS, j'essaie de lire à partir d'un fichier CSV et d'en insérer les lignes dans une base de données OLE DB. Pour cela, j'ai fait la configuration la plus simple jamais vue ci-dessous.

  1. Flat File Source - lit les lignes CSV.
  2. Derived Column - ne fait actuellement rien (il est juste là pour expérimenter).
  3. Data Conversion - ne fait actuellement rien (il est juste là pour expérimenter).
  4. OLE DB Destination - stocke les lignes dans la base de données.

Lorsque j'essaie de l'exécuter, il cesse de s'exécuter sur ma destination OLE DB avec le message d'erreur suivant.

Une erreur s'est produite avec la colonne d'entrée "Montant" (187) sur l'entrée "Entrée de destination OLE DB" (51). Le statut de la colonne renvoyée était: "La valeur n'a pas pu être convertie en raison d'une perte potentielle de données.".

La colonne qui échoue ( Amount) est actuellement de type DT_STR. Il semble que ce soit le type auquel j'ai le plus confiance en ce moment.

Qu'est-ce que j'ai essayé?

  • J'ai essayé d'utiliser la fonction Flat File Connection«Suggérer des types» de la colonne qui échoue. Cela lui a fait recommander le Single byte signed inttype de données.
    • Arrête à ma source de fichier plat .
    • L'erreur est Échec de la conversion des données. La conversion de données pour la colonne "Montant" a renvoyé la valeur d'état 2 et le texte d'état "La valeur n'a pas pu être convertie en raison d'une perte potentielle de données.".
  • J'ai essayé d'utiliser le Derived Columnpour convertir la colonne en un DT_I4.
    • Arrête à ma colonne dérivée .
    • L'erreur est Échec de la conversion des données. La conversion de données pour la colonne "Montant" a renvoyé la valeur d'état 2 et le texte d'état "La valeur n'a pas pu être convertie en raison d'une perte potentielle de données.".
  • J'ai essayé d'utiliser le Data Conversionpour convertir la valeur de ma colonne en a DT_I4.
    • Arrête à mon Data Conversion.
    • L'erreur est Échec de la conversion des données. La conversion de données pour la colonne "Montant" a renvoyé la valeur d'état 2 et le texte d'état "La valeur n'a pas pu être convertie en raison d'une perte potentielle de données.".
  • J'ai essayé de changer la longueur de ma DT_STRvaleur dans la source et la destination.
    • S'arrête à la source ou à la destination en fonction des paramètres.
  • J'ai essayé de me connecter à l'aide d'un connecteur Excel Source à la place avec et sans l' IMEX=1ajout à la chaîne de connexion. Pas de chance.

Mon sens de la programmation me dit que je suis foutu. Je n'ai jamais rencontré un si gros problème pour une chose aussi simple.

Et pourquoi ne puis-je pas simplement ignorer la perte "potentielle" de données? C'est vraiment frustrant de dire le moins.

Mon système

Il s'agit d'une machine Windows Server 2008 R2 avec SQL Server 2008 installé. La machine elle-même est entièrement mise à jour via Windows Update.


On dirait que j'ai eu ce problème avec une valeur (bien qu'en tirant d'Access) et j'ai dû utiliser une page de code spécifique lorsque j'ai converti la colonne. Je n'ai plus accès au package SSIS pour vérifier ce que j'ai fait.

Quel est le type de données de la colonne dans laquelle vous essayez d'insérer Amount?
Jon of All Trades du

2
Ouvrez votre gestionnaire de connexions de fichiers plats pour le CSV. Accédez à l'onglet Avancé et sélectionnez la Amountcolonne. Prenez une capture d'écran et mettez à jour votre question avec cette image.
billinkc

Avez-vous déjà eu l'occasion de consulter le gestionnaire de connexions?
billinkc

1
Je ne crois pas que vous soyez foutu mais sans voir la définition de votre Connection Manager, c'est impossible à dire.
billinkc

Réponses:


3

J'ai rencontré cela plusieurs fois et le problème était une inadéquation des types de données dans les paramètres d'exportation / importation. La première chose à faire est de vérifier ces paramètres en cliquant avec le bouton droit sur la source ou la destination, en sélectionnant Éditeur avancé. Accédez aux propriétés d'entrée et de sortie et vérifiez le type de données pour cette colonne pour tous les éléments - Externe, Sortie et Entrée. J'ai généralement vu un écart ici, souvent une fois est Unicode (WSTR) et l'autre I4 ou DSTR.


8

Ignorer l'erreur

Tout d'abord, vous devriez pouvoir ignorer la troncature des chaînes en accédant à votre source de fichier plat, sortie d'erreur, puis en changeant "Composant d'échec" sous "Troncature" en "Ignorer l'erreur".

Meilleure solution

Le vrai problème pourrait être que la longueur de chaîne à l'intérieur du pipeline SSIS est toujours incorrecte car elle a été initialisée à un moment antérieur.

Vous pouvez déterminer si c'est le cas en double-cliquant sur la flèche verte de votre source de fichier plat (ou après la conversion de colonne / données dérivée) et en choisissant "Métadonnées". Là, vous pouvez voir la longueur du champ à l'intérieur du pipeline.

Si vous avez souvent vu que les métadonnées ne correspondent plus au composant source, surtout si vous créez la source de fichier plat ET sa connexion correspondante via l'assistant.

Ma suggestion serait de supprimer la connexion et la source de fichier plat et de les recréer car je n'ai pas trouvé de moyen de resynchroniser les métadonnées du pipeline avec les composants source.


2
Cependant, cela ne relève pas de la "troncature". Je l'ai déjà essayé.
Mathias Lykkegaard Lorenzen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.