2010-06-24 6 views
5

J'utilise SSIS pour effectuer la transformation de données d'Excel vers OLEDB SQL. J'ai un ensemble de feuilles dans un dossier que je vais devoir faire une boucle et insérer les données dans chacune de ces feuilles à une table. J'ai un scénario où je dois faire une boucle à travers un ensemble de feuilles Excel qui a différentes structures de colonnes. Je peux faire une boucle à travers chaque feuille à travers chaque boucle de l'énumérateur trouver le nom de fichier et les transmettre à la source Excel.SSIS - mappages de colonnes dynamiques

Je veux savoir s'il y a moyen d'échapper à ces mappages de colonnes dans le composant de destination qui sera une table SQL OLEDB dans mon cas. Parce que ces mappages sont différents pour chaque fichier. Est-il possible de le faire de manière dynamique?

Répondre

5

Bien que vous puissiez ajouter une tâche de script dans la boucle pour modifier les mappages, ce n'est pas la chose la plus facile à faire, car vous devez explicitement créer chaque mappage dans le code. Une solution plus simple consisterait à remplacer les feuilles Excel par des fichiers texte délimités et à les importer dans la boucle à l'aide de la tâche d'insertion en bloc. Vous n'aurez à fournir aucune information de mappage tant que l'ordre des colonnes est le même dans les fichiers et les tables.

Si vous ne pouvez pas faire cela, vous devrez stocker les métadonnées de mappage quelque part, par ex. une table dans votre base de données et l'utiliser pour créer les mappages dynamiques dans une tâche de script.

Un moyen un peu plus simple consiste à utiliser une seule tâche de script qui utilise les métadonnées pour configurer un objet SqlBulkCopy. Vous perdez la flexibilité d'une tâche de flux de données complète, mais si tout ce que vous voulez est de charger des fichiers dans les talbes temporaires, c'est assez bon. De plus, il est beaucoup plus facile de configurer un objet SqlBulkCopy qu'une tâche de flux de données. Comment utiliser la tâche de script pour configurer un objet SQLBulkcopy?

+0

Comment utiliser la tâche de script pour configurer un objet SQLBulkcopy? Y at-il un lien que je peux utiliser? pouvez-vous s'il vous plaît être un peu plus bref ... désolé d'être si bête – Baaju

+3

Essayez la documentation de la classe SqlBulkCopyColumnMapping à http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopycolumnmapping.aspx pour un exemple qui utilise des mappages personnalisés. C'est aussi simple que de fournir un lecteur source (OleDbDataReader for excel), une connexion cible et de remplir la propriété ColumnMappings de l'objet SqlBulkCopy en utilisant les noms des colonnes source et cible. Vous pouvez même laisser la liste ColumnMappings vide, auquel cas elle mappe les colonnes en fonction de leur position ordinale, comme le fait la tâche d'insertion en bloc. –

Questions connexes