J'ai un package SSIS dans lequel j'utilise un conteneur ForEach pour faire défiler une destination de dossier et extraire un seul fichier .csv.Tuyauterie de données du fichier CSV vers la destination OLEDB dans SSIS
Le conteneur prend le fichier qu'il trouve et utilise le nom de fichier pour le ConnectionString d'un gestionnaire de connexions de fichiers plats.
Dans le conteneur, j'ai une tâche de flux de données pour déplacer les données de ligne du fichier .csv (en utilisant le gestionnaire de connexion de fichier plat) vers une destination OLEDB (il utilise un autre gestionnaire de connexion OLEDB).
Lorsque je tente d'exécuter ce conteneur, il peut saisir le nom du fichier, le charger dans le gestionnaire de connexions de fichiers plats, et commencer à transférer des données de la ligne; cependant, il cesse d'erreurs avant de passer sur toutes les données - à savoir sur deux questions:
Erreur: 0xC02020A1 à déplacer les données de règlement dans la table Temp, SettlementData_YYYYMM [1143]: Conversion de données a échoué. La conversion de données pour la colonne "" MONTHS_REMAIN "" 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.". Erreur: 0xC02020A1 lors du déplacement de données de fichier de résolution dans la table temporaire, source de fichier plat [665]: échec de la conversion de données. La conversion de données pour la colonne "" CUST_NAME "" a renvoyé la valeur d'état 4 et le texte d'état "Le texte a été tronqué ou un ou plusieurs caractères ne correspondaient pas dans la page de codes cible.". Dans mes recherches jusqu'à maintenant, je sais que vous pouvez définir les conditions pour forcer un échec d'erreur et choisir d'ignorer les échecs de Troncation dans le Gestionnaire de connexions; cependant, étant donné que ConnectionString de Flat File Connection Manager est refait chaque fois que le conteneur s'exécute, il ne semble pas conserver ces paramètres d'option. Il devrait aussi, selon mon expérience, choisir la plus grande valeur de l'ensemble de données lorsque le Gestionnaire de connexions choisira OutputColumnWidth pour chaque colonne, donc je ne comprends pas très bien comment il y a des noms tronqués (le DB est défini comme VARCHAR (255) donc il y a beaucoup de place là-bas). En ce qui concerne les conversions de données échouées, je ne comprends pas non plus comment cela peut se produire lorsque la colonne référencée utilise des valeurs Int simples, et que le gestionnaire de connexion ET la base réceptrice utilisent des flottants qui doivent englober les données Int (est-ce que je ne sais pas que vous ne pouvez pas convertir Int en Float?).
D'après mon expérience, certains fichiers .csv ne sont pas très lisibles dans SSIS lorsqu'ils sont directement dans une destination DB; donc, serait-il préférable de transformer le .csv en un fichier .xlsx, qui joue beaucoup mieux dans une base de données, ou y a-t-il autre chose qui me manque pour déplacer facilement des quantités massives de données d'un fichier .csv dans une base de données? OU, est-ce que je suis juste stupide et transforme un sujet trivial en quelque chose de plus grand que ça? Remarque: La raison pour laquelle je configure dynamiquement le fichier dans le Gestionnaire de connexion de fichier plat est que le fichier .csv aura un nom d'ensemble ajouté au mois/année, il a été produit dans le cadre d'un processus de répétition, et ainsi de suite. J'utilise la partie constante du nom de saisir quelle que soit la date d'info
EDIT: Voici un chapeau d'écran de mon directeur Flat File Connection aperçu de certaines des données qu'il va essayer de tuyau à travers.J'ai remarqué que certaines de ces lignes avaient des guillemets autour d'eux, et je voulais m'assurer que cela n'affecterait pas négativement - la colonne ayant des problèmes est la MONTHS_REMAIN un
Même si la connexion sous-jacente change, les paramètres de sortie d'erreur que vous avez définis pour le composant Source de fichier plat doivent être conservés. Rarement les fichiers XLSX facilitent les choses dans SSIS. Le connecteur XLSX souvent [devine le type de données des colonnes Excel faux] (https://www.concentra.co.uk/blog/why-ssis-always-gets-excel-data-types-wrong-and-how-to- répare le). Et les fichiers Excel apportent avec eux la complexité des handles de fichiers. Si quelqu'un d'autre a le fichier Excel ouvert, alors que le paquet essaie de le traiter, alors le paquet échouera. Stick avec des CSV. –