Question

Quelqu'un at-il pu importer un fichier texte (CSV) à longueur d'enregistrement variable dans SQL Server via SSIS?

J'ai essayé maintes et maintes fois d'obtenir un fichier CSV dans une table SQL Server, à l'aide de SSIS, dans lequel le fichier d'entrée avait des longueurs d'enregistrement variables. Pour cette question, les deux longueurs d'enregistrement différentes sont 63 et 326 octets. Toutes les longueurs d’enregistrement seront importées dans le même tableau de 326 octets.

Il y a plus d'un million d'enregistrements à importer.
Je n'ai aucun contrôle sur la création du fichier d'importation.
Je dois utiliser SSIS.
J'ai confirmé avec MS que cela avait été signalé comme un bug. J'ai essayé plusieurs solutions de contournement. La plupart ont été où j'essaie d'écrire du code personnalisé pour intercepter l'enregistrement et je n'arrive pas à le faire fonctionner comme je le veux.

Était-ce utile?

La solution

J'ai eu un problème similaire et j'utilisais un code personnalisé (tâche de script) et un composant de script sous l'onglet Flux de données.

J'ai une source de fichier à plat alimentant un composant de script. À l’intérieur, j’utilise le code pour manipuler les données entrantes et les corriger pour la destination.

Mon problème était que le fournisseur utilisait "000000" comme date indéterminée, et un autre colonne avait un problème de bourrage / découpage.

Autres conseils

Vous ne devriez pas avoir de problème pour importer ce fichier. Assurez-vous simplement que lorsque vous créez le gestionnaire de connexions de fichiers à plat, sélectionnez le format Délimité , puis définissez la longueur de colonne SSIS sur la longueur maximale de colonne du fichier afin qu'il puisse contenir toutes les données.

Il semble que vous utilisiez le format Largeur fixe, ce qui n'est pas correct pour les fichiers CSV (puisque vous avez une colonne de longueur variable), ou peut-être que vous avez défini le délimiteur de colonne de manière incorrecte.

Même problème. Dans mon cas, le fichier CSV cible a un en-tête & amp; enregistrements de pied de page avec des formats complètement différents du corps du fichier; l’en-tête / le pied de page servent à valider l’exhaustivité du traitement du fichier (date / heure, nombre d’enregistrements, montant total - "somme de contrôle" sous un autre nom, etc.). Il s’agit d’un format courant pour les fichiers de " mainframe " environnements, et même si je n’ai pas encore commencé, j’attends d’utiliser des scripts pour supprimer l’en-tête / le pied de page, enregistrer le reste dans un nouveau fichier, traiter le nouveau fichier, puis effectuer la validation. On ne peut pas vraiment s'attendre à ce que MS ait accès à cette solution (mais ce serait vraiment bien, n'est-ce pas?).

Vous pouvez écrire une tâche de script en utilisant C # pour parcourir chaque ligne et la compléter avec la quantité appropriée de virgules pour compléter les données. Cela suppose, bien entendu, que toutes les données s'alignent sur les colonnes appropriées.

I.e. en lisant chaque enregistrement, vous pouvez & compter; compter " le nombre de virgules. Ensuite, ajoutez simplement un nombre X de virgules à la fin de l'enregistrement jusqu'à ce que celui-ci contienne le nombre correct.

Excel a un problème qui entraîne la création de ce type de fichier lors de la conversion au format CSV.

Si vous pouvez le faire "à la main" Pour résoudre ce problème, la meilleure solution consiste à ouvrir le fichier dans Excel, à créer une colonne à la fin du fichier "fin". de l'enregistrement et remplissez-le jusqu'au bas avec 1 ou un autre caractère.

Nasty, mais peut être une solution rapide.

Si vous n'êtes pas en mesure de le faire, vous pouvez effectuer la même chose par programmation, comme décrit ci-dessus.

Pourquoi ne pouvez-vous pas simplement l'importer en tant que fichier de test et définir le séparateur de colonnes sur "," et le séparateur de ligne à CRLF?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top