Foreach-Schleifencontainer

Der Foreach-Schleifencontainer definiert eine sich wiederholende Ablaufsteuerung in einem Paket. Die Schleifenimplementierung ist mit der Foreach-Schleifenstruktur in Programmiersprachen zu vergleichen. In einem Paket wird die Schleife mithilfe eines Foreach-Enumerators aktiviert. Der Foreach-Schleifencontainer wiederholt die Ablaufsteuerung für jedes Element eines angegebenen Enumerators.

SQL Server Integration Services stellt die folgenden Enumeratortypen bereit:

  • Foreach-ADO-Enumerator zum Aufzählen von Zeilen in Tabellen. Beispielsweise können Sie die Zeilen in einem ADO-Recordset abrufen.

    Stattdessen speichert das Recordsetziel Daten im Speicher eines Recordsets, das in einer Object-Paketvariablen des Datentyps gespeichert ist. Sie verwenden einen Foreach-Schleifencontainer mit dem Foreach-ADO-Enumerator normalerweise, um die Zeilen eines Recordsets nacheinander zu verarbeiten. Die für den Foreach-ADO-Enumerator angegebene Variable muss vom Object-Datentyp sein. Weitere Informationen zum Recordsetziel finden Sie unter Use a Recordset Destination.

  • Enumerator für Foreach-ADO.NET-Schemarowsets zum Aufzählen der Schemainformationen zu einer Datenquelle. Beispielsweise können Sie die Tabellen in der SQL Server-Datenbank AdventureWorks2012 aufzählen und eine Liste mit diesen Tabellen abrufen.

  • Foreach-Datei-Enumerator zum Aufzählen von Dateien in einem Ordner. Der Enumerator kann Unterordner durchlaufen. Beispielsweise können Sie alle Dateien mit der Dateinamenerweiterung LOG im Windows-Ordner und in dessen Unterordnern lesen.

  • Foreach-Enumerator für Daten aus Variablen zum Aufzählen des aufzählbaren Objekts, das in einer angegebenen Variable enthalten ist. Das aufzählbare Objekt kann ein Array, ein ADO.NET DataTable, ein Integration Services-Enumerator usw. sein. Beispielsweise können Sie die Werte eines Arrays aufzählen, das Servernamen enthält.

  • Foreach-Element-Enumerator zum Aufzählen von Elementen, bei denen es sich um Sammlungen handelt. Beispielsweise können Sie die Namen der ausführbaren Dateien und Arbeitsverzeichnisse aufzählen, die ein Task „Prozess ausführen“ verwendet.

  • Foreach-NodeList-Enumerator zum Aufzählen des Resultsets eines XPATH-Ausdrucks (XML Path Language). Beispielsweise zählt der folgende Ausdruck alle Autoren der Klassik auf und ruft eine Liste dafür ab: /authors/author[@period='classical'].

  • Foreach-SMO-Enumerator zum Aufzählen von SMO-Objekten (SQL Server Management Objects). Beispielsweise können Sie die Sichten in einer SQL Server-Datenbank aufzählen und eine Liste dafür abrufen.

  • Foreach-Azure-Blob-Enumerator zum Aufzählen von Blobs in einem BLOB-Container in einem Azure-Speicher.

  • Foreach ADLS File enumerator to enumerate files in a ADLS directory.

Das folgende Diagramm zeigt einen Foreach-Schleifencontainer mit einem Dateisystemtask. Die Foreach-Schleife verwendet den Foreach-Datei-Enumerator, und der Dateisystemtask ist so konfiguriert, dass eine Datei kopiert wird. Falls der vom Enumerator angegebene Ordner vier Dateien enthält, wird die Schleife viermal wiederholt, und die vier Dateien werden kopiert.

Ein Foreach-Schleifencontainer, der einen Ordner aufzählt

Sie können eine Kombination aus Variablen und Eigenschaftsausdrücken verwenden, um die Paketobjekteigenschaft mit dem Wert aus der Enumeratorsammlung zu aktualisieren. Zunächst ordnen Sie den Sammlungswert einer benutzerdefinierten Variablen zu. Anschließend implementieren Sie einen Eigenschaftsausdruck für die Eigenschaft, die die Variable verwendet. Beispielsweise wird der Auflistungswert des Foreach File-Enumerators einer Variablen namens MyFile zugeordnet, und die Variable wird dann im Eigenschaftsausdruck für die Subject-Eigenschaft eines Tasks "E-Mail senden" verwendet. Beim Ausführen des Pakets wird die Subject-Eigenschaft bei jeder Wiederholung der Schleife mit dem Namen einer Datei aktualisiert. Weitere Informationen finden Sie unter Verwenden von Eigenschaftsausdrücken in Paketen.

Variablen, die dem Enumeratorsammlungswert zugeordnet sind, können auch in Ausdrücken und Skripts verwendet werden.

Ein Foreach-Schleifencontainer kann mehrere Tasks und Container umfassen, aber nur einen Enumeratortyp verwenden. Falls der Foreach-Schleifencontainer mehrere Tasks umfasst, können Sie den Enumeratorsammlungswert mehreren Eigenschaften jedes Tasks zuordnen.

Sie können ein Transaktionsattribut für den Foreach-Schleifencontainer festlegen, um eine Transaktion für eine Teilmenge der Paketablaufsteuerung zu definieren. Auf diese Weise können Sie Transaktionen statt auf der Paketebene auf der Ebene der Foreach-Schleife verwalten. Wenn z. B. ein Foreach-Schleifencontainer eine Ablaufsteuerung wiederholt, die Dimensions- und Faktentabellen in einem Sternschema aktualisiert, können Sie eine Transaktion konfigurieren, um sicherzustellen, dass entweder alle oder überhaupt keine Faktentabellen aktualisiert werden. Weitere Informationen finden Sie unter Integration Services-Transaktionen.

Enumeratortypen

Enumeratoren sind konfigurierbar, und je nach Enumerator müssen Sie unterschiedliche Informationen angeben.

In der folgenden Tabelle sind die Informationen zusammengefasst, die für die einzelnen Enumeratortypen erforderlich sind.

Enumerator Konfigurationsanforderungen
Foreach-ADO-Enumerator Geben Sie die ADO-Objektquellvariable und den Enumeratormodus an. Die Variable muss vom Datentyp „Object“ sein.
Enumerator für Foreach-ADO.NET-Schemarowset Geben Sie die Verbindung mit einer Datenbank und das aufzuzählende Schema an.
Foreach-Datei-Enumerator Geben Sie einen Ordner sowie die aufzuzählenden Dateien und das Format des Dateinamens der abgerufenen Dateien an. Geben Sie ferner an, ob Unterordner durchlaufen werden sollen.
Foreach-Enumerator für Daten aus Variable Geben Sie die Variable an, die die aufzuzählenden Objekte enthält.
Foreach-Element-Enumerator Definieren Sie die Elemente in der Foreach-Element-Sammlung, einschließlich der Spalten und Spaltendatentypen.
Foreach-NodeList-Enumerator Geben Sie die Quelle des XML-Dokuments an, und konfigurieren Sie den XPath-Vorgang.
Foreach-SMO-Enumerator Geben Sie die Verbindung mit einer Datenbank und die aufzuzählenden SMO-Objekte an.
Foreach-Azure-Blob-Enumerator Geben Sie den Azure-Blobcontainer an, der die aufzuzählenden Blobs enthält.
Foreach-ADLS-Datei Geben Sie das ADLS-Verzeichnis an, das dateien enthält, die aufgelistet werden sollen, sowie einige Filter.

Eigenschaftsausdrücke in Foreach-Schleifencontainern

Pakete können so konfiguriert werden, dass mehrere ausführbare Dateien gleichzeitig ausgeführt werden. Diese Konfiguration sollte mit Vorsicht verwendet werden, wenn das Paket einen Foreach-Schleifencontainer enthält, der Eigenschaftsausdrücke implementiert.

Es ist häufig nützlich, einen Eigenschaftsausdruck zu implementieren, um den Wert der ConnectionString-Eigenschaft des Verbindungs-Managers festzulegen, den die Foreach-Schleifenenumeratoren verwenden. Der ConnectionString-Eigenschaftsausdruck wird durch eine Variable festgelegt, die dem Sammlungswert des Enumerators zugeordnet ist und bei jeder Iteration der Schleife aktualisiert wird.

Das Paket sollte so konfiguriert sein, dass jeweils nur eine ausführbare Datei ausgeführt wird, um in der Schleife negative Auswirkungen einer unbestimmten Zeitvorgabe der parallelen Taskausführung zu vermeiden. Wenn beispielsweise ein Paket mehrere Tasks gleichzeitig ausführen kann, können bei einem Foreach-Schleifencontainer, der im Ordner vorhandene Dateien aufzählt, die Dateinamen abruft und dann mithilfe eines Tasks „SQL ausführen“ die Dateinamen in eine Tabelle einfügt, Schreibkonflikte auftreten, falls zwei Instanzen des Tasks „SQL ausführen“ gleichzeitig zu schreiben versuchen. Weitere Informationen finden Sie unter Verwenden von Eigenschaftsausdrücken in Paketen.

Sie können Eigenschaften mit dem SSIS -Designer oder programmgesteuert festlegen.

Weitere Informationen zum Festlegen dieser Eigenschaften in SSIS Designer finden Sie in einem der folgenden Themen:

Klicken Sie auf das folgende Thema, um weitere Informationen zum programmgesteuerten Festlegen dieser Eigenschaften anzuzeigen:

Blogeintrag SSIS – Foreach NodeList-Enumeratorauf auf bidn.combidn.com.

Weitere Informationen

Ablaufsteuerung
SQL Server Integration Services-Container