Remplir un champ varbinary(max) avec des fichiers d’un répertoire

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.

image

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.

image

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

image 

  • Lier cette ID à la colonne d’entrée

image

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.

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s