Introduction :
Ce post va décrire les fondamentaux permettant de travailler avec plusieurs fichiers sous SSIS : boucle FOREACH, passage de variables.
Mon cahier des charges est le suivant :
1er temps extraction de plusieurs fichiers texte de clubs (1 par ligue)
2ème temps envoi de chacun de ces fichiers par mail
Extraction des fichiers depuis la base :
Il me faut d'abord une liste des CODE_LIGUE à extraire; j'ai choisi de mettre cette liste dans un dataset en mémoire.
Je le fais par une première tâche de flux de données que voici :
... le dataset étant déclaré dans une variable que voilà :
... ensuite, je génère un fichier par club avec cette boucle FOREACH :
...il ne me reste plus qu'à exporter les données proprement dites par le flux de données que voilà :
Bien sûr, la requête d'extraction est paramétrée en fonction du CODE_LIGUE rendu par la boucle FOREACH dans variable csCodeLigue :
Il ne me reste plus qu'à gérer dynamiquement le nom du fichier de sortie :
...par une variable qui s'évalue dynamiquement en fonction de la variable csCodeLigue :
... et à configurer dynamiquement le Connection String de la destination fichier :
... pour que la première partie fonctionne parfaitement :
Envoi des fichiers par EMail :
Je vais de nouveau utiliser un container FOREACH, mais cette fois ci sur une collection de fichiers :
Allons-y pour l'envoi du mail :
en lui attachant le fichier dont le nom est contenu dans une variable :
C'est parti pour un petit run :
Mais que se passe-t-il ? (avec un accent asiatique...)
Les expressions variables ne peuvent être évaluées au moment de la 'compilation' mais bien au moment de l'exécution, il faut donc différer cette vérification :
Et là, le miracle se produit : les mails sont bien envoyés !!!
Le fichier joint étant bien celui que l'on souhaite :
Voici le package complet :
Conclusion :
Ce post montre, une fois de plus, la puissance de SSIS ... c'est toujours impressionnant pour moi de faire en quelques minutes des tâches qui auparavant m'avaient demandé des heures de programmation !