Partager via


Conteneur de boucles Foreach

Le conteneur de boucles Foreach définit un flux de contrôle répétitif dans un package. La mise en œuvre de la boucle est similaire à la structure de bouclage Foreach des langages de programmation. Dans un package, le bouclage repose sur l'utilisation d'un énumérateur Foreach. Le conteneur de boucles Foreach répète le flux de contrôle pour chaque membre d'un énumérateur spécifié.

SQL ServerIntegration Services fournit les types d'énumérateur suivants :

  • Foreach ADO Enumerator, pour l'énumération des lignes des tables. Par exemple, vous pouvez obtenir les lignes d'un ensemble d'enregistrements ADO.

  • Énumérateur de l'ensemble de lignes du schéma Foreach ADO.NET, pour l'énumération des informations de schéma relatives à une source de données. Par exemple, vous pouvez énumérer les tables de la base de données SQL ServerAdventureWorks et en obtenir la liste.

  • Énumérateur de fichier Foreach, pour l'énumération des fichiers d'un dossier. L'énumérateur peut parcourir les sous-dossiers. Par exemple, vous pouvez lire tous les fichiers portant l'extension de nom de fichier *.log stockés dans le dossier Windows et ses sous-dossiers.

  • Foreach From Variable Enumerator, pour l'énumération de l'objet énumérable contenu dans une variable spécifiée. L'objet énumérable peut être un tableau, un DataTable ADO.NET, un énumérateur Integration Services, etc. Par exemple, vous pouvez énumérer les valeurs d'un tableau qui contient des noms de serveurs.

  • Énumérateur d'élément Foreach, pour l'énumération des éléments qui sont des collections. Par exemple, vous pouvez énumérer les noms d'exécutables et de répertoires de travail qu'une tâche d'exécution de processus utilise.

  • Foreach NodeList Enumerator, pour l'énumération de l'ensemble de résultats d'une expression XPath (XML Path Language). Par exemple, l'expression suivante énumère tous les auteurs de la période classique et en obtient la liste : /authors/author[@period='classical'].

  • Foreach SMO Enumerator, pour l'énumération des objets SMO (SQL Server Management Object). Par exemple, vous pouvez énumérer les vues d'une base de données SQL Server et en obtenir la liste.

Le schéma suivant montre un conteneur de boucles Foreach ayant une tâche de système de fichiers. La boucle Foreach utilise l'énumérateur de fichier Foreach, tandis que la tâche de système de fichiers est configurée pour copier un fichier. Si le dossier spécifié par l'énumérateur contient quatre fichiers, la boucle se répète quatre fois et copie quatre fichiers.

Conteneur de boucles Foreach énumérant un dossier

Vous pouvez utiliser une combinaison de variables et d'expressions de propriété pour mettre à jour la propriété de l'objet de package avec la valeur de la collection de l'énumérateur. Vous mappez la valeur de la collection avec une variable définie par l'utilisateur, puis vous mettez en œuvre une expression de propriété sur la propriété qui utilise la variable. Par exemple, la valeur de la collection de l'énumérateur de fichier Foreach est mappée avec une variable appelée MyFile, puis celle-ci est utilisée dans l'expression de la propriété Subject d'une tâche Envoyer un message. À l'exécution du package, la propriété Subject est mise à jour avec le nom d'un fichier à chaque répétition de la boucle. Pour plus d'informations, consultez Utilisation des expressions de propriété dans des packages.

Vous pouvez également utiliser dans des expressions et des scripts les variables mappées à la valeur de la collection de l'énumérateur.

Un conteneur de boucles Foreach peut comprendre plusieurs tâches et conteneurs, mais il ne peut utiliser qu'un type d'énumérateur. Si le conteneur de boucles Foreach comprend plusieurs tâches, vous pouvez mapper la valeur de la collection de l'énumérateur avec plusieurs propriétés de chaque tâche.

Vous pouvez configurer un attribut de transaction sur le conteneur de boucles Foreach afin de définir une transaction pour un sous-ensemble du flux de contrôle du package. Cela vous permet de gérer les transactions au niveau de la boucle Foreach plutôt qu'au niveau du package. Par exemple, si un conteneur de boucles Foreach répète un flux de contrôle qui met à jour des dimensions et des tables de faits dans un schéma en étoile, vous pouvez configurer une transaction de manière à ce que toutes les tables de faits soient correctement mises à jour ou à ce qu'aucune des tables ne soit actualisée. Pour plus d'informations, consultez Incorporation des transactions dans les packages.

Types d'énumérateur

Vous pouvez configurer les énumérateurs en indiquant différentes informations pour chacun d'eux.

Le tableau suivant récapitule les informations requises pour chaque type d'énumérateur.

Énumérateur

Configuration requise

Foreach ADO

Spécifiez la variable source de l'objet ADO et le mode de l'énumérateur.

Foreach ADO.NET Schema Rowset

Spécifiez la connexion à une base de données et le schéma à énumérer.

Fichier Foreach

Spécifiez un dossier et les fichiers à énumérer, le format du nom des fichiers extraits, et indiquez si l'opération doit parcourir les sous-dossiers.

Foreach From Variable

Spécifiez la variable qui contient les objets à énumérer.

Élément Foreach

Définissez les éléments de la collection d'éléments Foreach, notamment les colonnes et leur type de données.

Foreach NodeList

Spécifiez la source du document XML et configurez l'opération XPath.

Foreach SMO

Spécifiez la connexion à une base de données et les objets SMO à énumérer.

Utilisation d'expressions de propriété dans des conteneurs de boucles Foreach

Les packages peuvent être configurés pour exécuter simultanément plusieurs exécutables. Cette configuration doit être utilisée avec précaution lorsque le package inclut un conteneur de boucles Foreach qui implémente des expressions de propriété.

Il est souvent pratique d'implémenter une expression de propriété pour définir la valeur de la propriété ConnectionString des gestionnaires de connexions que les énumérateurs de boucles Foreach utilisent. L'expression de propriété de ConnectionString est définie par une variable mappée à la valeur de collection de l'énumérateur et est mise à jour à chaque itération de la boucle.

Pour éviter les conséquences négatives d'une synchronisation non déterminante d'une exécution parallèle de tâches dans la boucle, le package doit être configuré pour exécuter un seul exécutable à la fois. Par exemple, si un package peut exécuter plusieurs tâches simultanément, un conteneur de boucles Foreach qui énumère les fichiers dans le dossier, récupère les noms de fichiers, puis utilise une tâche d'exécution SQL pour insérer les noms de fichiers dans une table peut provoquer des conflits d'écriture lorsque deux instances de la tâche d'exécution SQL tentent d'écrire simultanément. Pour plus d'informations, consultez Utilisation des expressions de propriété dans des packages.

Configuration du conteneur de boucles Foreach

Vous pouvez définir les propriétés par le biais du concepteur SSIS ou par programme.

Pour plus d'informations sur les propriétés définissables dans le concepteur SSIS, cliquez sur l'une des rubriques suivantes :

Pour plus d'informations sur la définition de ces propriétés dans le concepteur SSIS, cliquez sur l'une des rubriques suivantes :

Configuration du conteneur de boucles Foreach par programme

Pour plus d'informations sur la définition par programme de ces propriétés, cliquez sur la rubrique suivante :

Icône Integration Services (petite) Rester à jour avec Integration Services

Pour obtenir les derniers téléchargements, articles, exemples et vidéos de Microsoft, ainsi que des solutions sélectionnées par la communauté, visitez la page Integration Services sur MSDN ou TechNet :

Pour recevoir une notification automatique de ces mises à jour, abonnez-vous aux flux RSS disponibles sur la page.