SSIS continue de forcer le changement de la chaîne source Excel pour flotter


9

Il y a une colonne dans Excel qui est censée être du texte, mais SSIS y voit du texte numérique et le fait automatiquement flotter en double précision [DT_R8].

Je peux le modifier manuellement dans les colonnes externes et de sortie de la branche Sortie, mais la sortie d'erreur refuse simplement de me laisser changer la colonne respective.

Error at Extract Stations [Excel Source [1]]: The data type for "output "Excel Source Error Output" (10)" cannot be modified in the error "output column "Group No" (29)".
Error at Extract Stations [Excel Source [1]]: Failed to set property "DataType" on "output column "Group No" (29)".

J'ai essayé de modifier le package xml. J'ai essayé le IMEX=1et typeguessrow=0mais rien de tout cela n'a résolu mon problème. Cela a-t-il une solution? Il existe également des articles vous suggérant de modifier votre registre afin qu'Excel lise plus que les 8 lignes par défaut avant de deviner le type de données. Je ne veux pas emprunter cette voie car même si cela devait fonctionner, je devrais alors modifier le registre sur la machine sur laquelle je prévois d'exécuter le package.

Le champ Excel à importer dans le champ SQL nvarchar lit par exemple

295.3
296.33

mais ils sont écrits dans la table SQL comme

295.30000000000001
296.32999999999998

Je mets des visualiseurs de données et les champs montrent

295.3
296.33

tout au long de l'exécution, ce qui est correct, mais je suppose que lorsqu'il atteint la source de destination OLE DB, il le convertit en quelque sorte en

295.30000000000001
296.32999999999998

ce qui est faux.

J'ai également des valeurs telles que V321.1 et V213.34 par exemple qui ne sont définitivement pas des entiers et doivent être stockées en tant que varchar.


Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
Paul White 9

Réponses:


2

Est-il possible d'obtenir le fichier en tant que fichier .csv qui peut être importé comme un fichier texte et n'aura pas ce problème? Je récupère généralement tous les fichiers Excel et demande un autre format car SSIS et Excel ne fonctionnent pas bien ensemble à plusieurs niveaux.


1
Je saute le changement au fichier .csv ou txt est dans un proche avenir. rendra les choses beaucoup plus faciles.
Juan Velez

2

Il semble qu'il n'y ait aucun moyen de résoudre ce problème. Excel examine les premières lignes de données de la colonne et forcera toujours le type de données à FLOAT quoi qu'il arrive. On m'a proposé de créer un modèle avec quelques caractères varchar dans les premières lignes (8+) afin qu'EXCEL le prenne comme type de données, puis importe mes données. Ce qui m'a aidé, c'est que depuis que j'utilise Source Safe, je suis en mesure d '«archiver» un fichier afin qu'il rende mon fichier de package «en lecture seule» afin que Visual Studio ne puisse pas modifier mes types de données prédéfinis.


1

Étape 1: ajoutez IMEX=1; MAXROWSTOSCAN=0la chaîne de connexion (par exemple Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Source\filename.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES;IMEX=1; MAXROWSTOSCAN=0").

Étape 2: fermez la solution. Ouvrez le package SSIS dans l'éditeur de texte, recherchez les colonnes qui continuaient à revenir au type de données prédéfini. Mettez-le à jour manuellement dans le fichier XML au format souhaité.

Étape 3: Ouvrez le package dans SQL Server Data Tool et exécutez-le, vous devriez maintenant pouvoir charger les données telles quelles à partir du fichier.


Désolé, mais le type de données source n'est pas dans le package. Seuls les types de colonne de destination. Cela va à nouveau à l'encontre du but, car la conversion se produit toujours à côté du pilote Microsoft.Ace (ou quel que soit le pilote choisi), et la perte de données s'est déjà produite au moment où il entre dans SSIS et la table de destination.
Ingénieur inversé
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.