Petit challenge personnel il y a quelques jours, on me demande comment mettre le contenu d’un répertoire dans une table en base de données (pour préparer une démo à la BDC).
Evidemment, étant entouré de développeurs, tout le monde a pensé à une application console avec de l’Entity Framework ou du Linq2SQL. Mais le temps de se décider, j’avais implémenté la solution avec SSIS, outil parfaitement adapté pour l’intégration de données ;).
La piste suivie est une tâche de DataFlow qui s’appelle Import Column qui sert à injecter des fichiers dans un flux de données.
Pour le faire fonctionner, il nous faut dans le flux d’entrée une colonne avec le nom du fichier. Donc ma première tâche dans le Control Flow est de remplir une table avec les chemins complets. Pour cela, j’utilise un Foreach Loop qui itère sur les fichiers du répertoire et fait un Insert SQL.
Ensuite, dans le DataFlow Task, je récupère ces noms de fichiers, je les envoie dans la tâche Import Column et j’enregistre cela dans ma base avec une Destination SQL.
Petit truc pour configurer le composant Import Column (qui n’est pas du tout intuitif), il faut :
- Créer manuellement l’Output Column qui va recevoir le binaire. Elle se mettra automatiquement au bon type (DT_IMAGE, l’ancien nom de varbinary(max) :()
- Récupérer l’ID de cette colonne
- Lier cette ID à la colonne d’entrée
Et voila, une fois ce tips connu, tout est OK, vous obtenez un lot pour intégrer des fichiers dans une base très rapidement.
Temps de dev : 5 minutes
Le code source est disponible sur demande.
PS : il faut juste avoir une instance SSIS sur la machine qui exécutera le package.