Remplir un champ varbinary(max) avec des fichiers d'un répertoire
Par L'équipe Bewise, posté le 12/07/2010
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).
SET MODE_MAUVAISE_FOI ON
Evidemment, étant entouré de développeurs, tout le monde pense à 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 ;).
SET MODE_MAUVAISE_FOI OFF
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 voilà, 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.




