web-dev-qa-db-fra.com

SSIS - Comment parcourir les fichiers dans le dossier et obtenir les noms de chemin + fichier et enfin exécuter la procédure stockée avec le paramètre Path + Filename

Toute aide est très appréciée. J'essaie de créer un package SSIS pour parcourir les fichiers dans le dossier et obtenir le chemin + nom de fichier et enfin exécuter le proc stocké avec le paramètre chemin + nom de fichier. Je ne sais pas comment obtenir le chemin + le nom de fichier et insérer le paramètre dans le proc stocké. J'ai joint la capture d'écran pour votre référence:

11
Sai

On dirait que vous avez la bonne idée en général et le lien @ Speedbirt186 fourni contient de bons détails, mais il semble qu'il y ait quelques nuances que je pensais pouvoir souligner en ce qui concerne le flux et les variables.

La boucle foreach peut affecter le chemin complet ou le nom de fichier ou le nom de fichier et l'extension à une variable. Ce dernier sera le plus utile dans votre cas si vous ne voulez pas ajouter une tâche de script pour séparer le nom de fichier du chemin. Si vous commencez par ajouter 5 variables à votre projet, cela sera un peu plus facile. 1 sera le chemin du répertoire source, un autre le chemin du répertoire de destination (archive), puis 1 pour contenir le nom de fichier et l'extension affectés par le pour chaque boucle. Ensuite, 2 variables dynamiques supplémentaires qui combinent simplement le répertoire source et le nom de fichier pour obtenir le chemin complet source et la destination avec le nom de fichier pour obtenir le chemin complet de destination.

enter image description here

Assurez-vous ensuite de configurer votre base de données et les connexions de fichiers Excel. Dans votre connexion de fichier Excel après l'avoir configurée, allez dans Expressions dans la fenêtre des propriétés et définissez la propriété "Connection String" sur SourceFullPath. Cela indiquera à la connexion de changer le chemin du fichier à chaque itération de votre boucle.

enter image description here

Maintenant, il vous suffit de configurer votre boucle, etc. Ajoutez l'avant de chaque conteneur de boucle en définissant un répertoire, filtrez et choisissez Nom et extension de fichier.

enter image description here

Maintenant, dans la zone d'expression de la page de collection, définissez la propriété de répertoire comme celle de votre variable de répertoire source.

enter image description here

La dernière partie de la boucle Fore each consiste à définir vos mappages de variables pour stocker le nom de fichier dans votre variable. alors allez dans cet onglet choisissez votre variable de nom de fichier et définissez l'index sur 0.

enter image description here

À ce stade, vous pouvez ajouter votre flux de données et configurer votre importation comme vous le feriez avec un fichier normal (notez que la valeur par défaut de votre paramètre de nom de fichier doit être un fichier réel avec la structure que vous souhaitez importer).

Une fois votre flux de données déposé dans votre tâche d'exécution SQL et configurez-le selon vos besoins. voici un exemple d'entrée directe et vous pouvez voir qu'un moyen facile de référencer un paramètre est simplement un point d'interrogation (?).

enter image description here

Ensuite, dans votre tâche SQL, configurez votre mappage de paramètres en ajoutant les détails dont vous avez besoin, tels que:

enter image description here

Vous êtes maintenant à votre tâche de fichier. Déposez votre tâche de fichier et configurez-la comme vous le souhaitez, mais choisissez votre destination et les variables de chemin complet source pour indiquer à la tâche quel fichier déplacer.

enter image description here

c'est tout, vous avez terminé. il y a encore une chose à noter. La façon dont vous avez défini votre priorité dans l'image que vous avez publiée montre que vous passez de votre flux de données à votre SQL et à votre tâche de fichier simultanément. Si votre procédure stockée repose sur votre fichier, vous souhaiterez peut-être le placer après votre tâche SQL. Vous pouvez toujours changer les options de contrainte en "achèvement" si vous souhaitez déplacer le fichier même si votre proc stocké échoue.

enter image description hereenter image description here

17
Matt

Ce que vous voulez faire est de créer une variable dans votre package, appelez-la quelque chose comme Filename. Dans la fenêtre d'édition du Foreach, vous pouvez configurer cette variable à définir (sur l'index de mise en page des mappages de variables à 0).

Pour créer une variable, vous devrez avoir la fenêtre Variables affichée. Utilisez le menu Affichage pour l'afficher s'il n'est pas actuellement ouvert.

Ensuite, lorsque vous appelez votre procédure stockée, vous pouvez passer la valeur actuelle de la variable en tant que paramètre.

Ce lien pourrait aider: https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/

4
SvenAelterman