Foreach 迴圈容器
「Foreach 迴圈」容器定義封裝中重複的控制流程。迴圈實作與程式設計語言中 Foreach 迴圈的結構類似。在封裝中,迴圈是使用 Foreach 列舉值啟用。「Foreach 迴圈」容器會為指定列舉值的每個成員重複控制流程。
SQL ServerIntegration Services 提供下列列舉值類型:
Foreach ADO 列舉值,用來列舉資料表中的資料列。例如,您可以在 ADO 資料錄集中取得資料列。
「Foreach ADO.NET 結構描述資料列集」列舉值,用來列舉有關資料來源的結構描述資訊。例如,您可以列舉並取得一份 AdventureWorksSQL Server 資料庫中資料表的清單。
「Foreach 檔案」列舉值,用來列舉資料夾中的檔案。列舉值可往返子資料夾。例如,您可以讀取 Windows 資料夾及其子資料夾中所有副檔名為 *.log 的檔案。
Foreach From Variable 列舉值,用來列舉指定的變數所包含的可列舉物件。可列舉物件可以是陣列、ADO.NET DataTable、Integration Services 列舉值等等。例如,您可以列舉包含伺服器名稱之陣列的值。
「Foreach 項目」列舉值,用來列舉集合項目。例如,您可以列舉「執行處理」工作使用之可執行檔與工作目錄的名稱。
Foreach Nodelist 列舉值,用來列舉 XML 路徑語言 (XPath) 運算式的結果集。例如,此運算式會列舉並取得一份古典時期所有作者的清單:/authors/author[@period='classical']。
Foreach SMO 列舉值,用來列舉 SQL Server Management Objects (SMO) 物件。例如,您可以列舉並取得一份 SQL Server 資料庫中檢視的清單。
下列圖表顯示擁有「檔案系統」工作的「Foreach 迴圈」容器。Foreach 迴圈會使用「Foreach 檔案」列舉值,而「檔案系統」工作則設定為複製檔案。如果列舉值指定的資料夾含有四個檔案,則迴圈會重複四次並複製四個檔案。
您可以使用變數和屬性運算式的組合,以列舉值集合值更新封裝物件的屬性。首先,對應集合值與使用者定義的變數,接著在使用該變數的屬性上實作屬性運算式。例如,「Foreach 檔案」列舉值的集合值會對應到名稱為 MyFile 的變數,接著會在傳送郵件工作的 Subject 屬性的屬性運算式中使用此變數。當封裝執行時,便會在每次迴圈重複時以某個檔案名稱更新 Subject 屬性。如需詳細資訊,請參閱<在封裝中使用屬性運算式>。
對應至列舉值集合值的變數亦可在運算式和指令碼中使用。
「Foreach 迴圈」容器可包含多項工作和容器,但它只能使用一種列舉值。如果「Foreach 迴圈」容器包含多項工作,您可將列舉值集合值對應至每項工作的多個屬性。
您可以在「Foreach 迴圈」容器上設定交易屬性,用來定義封裝控制流程子集的交易。您可利用此方式於「Foreach 迴圈」層級管理交易,而非封裝層級。例如,如果「Foreach 迴圈」容器重複更新星狀結構描述中維度和事實資料表的控制流程,則可設定交易以確認所有事實資料表均成功更新,或不更新任何資料表。如需詳細資訊,請參閱<在封裝中合併交易>。
列舉值類型
列舉值可加以設定,而您必須根據列舉值提供不同的資訊。
下表摘要說明各列舉值類型所需的資訊。
列舉值 |
組態需求 |
---|---|
Foreach ADO |
指定 ADO 物件來源變數和列舉值模式。 |
Foreach ADO.NET 結構描述資料列集 |
指定資料庫的連接和要列舉的結構描述。 |
Foreach 檔案 |
指定資料夾和要列舉的檔案、所擷取檔案的檔名格式,以及是否往返子資料夾。 |
Foreach From Variable |
指定包含要列舉物件的變數。 |
Foreach 項目 |
定義「Foreach 項目」集合中的項目,包括資料行和資料行資料類型。 |
Foreach Nodelist |
指定 XML 文件的來源並設定 XPath 作業。 |
Foreach SMO |
指定資料庫的連接和要列舉的 SMO 物件。 |
在 Foreach 迴圈容器中使用屬性運算式
封裝可以設定成同時執行多個可執行檔。當封裝包含實作屬性運算式的「Foreach 迴圈」容器時,請謹慎使用這項組態。
實作屬性運算式通常非常適合用來設定「Foreach 迴圈」列舉值所使用之連接管理員的 ConnectionString 屬性值。ConnectionString 的屬性運算式是由對應至列舉值之集合值的變數加以設定,並於迴圈的每個反覆運算中進行更新。
為了避免可執行檔平行執行時機不確定的負面影響,您應該將封裝設定為一次只執行一個可執行檔。例如,如果封裝可以同時執行多項工作,當執行 SQL 工作的兩個執行個體試圖同時進行寫入時,負責列舉資料夾中的檔案、擷取檔案名稱,然後使用執行 SQL 工作將檔案名稱插入資料表等步驟的「Foreach 迴圈」容器可能會引發寫入衝突。如需詳細資訊,請參閱<在封裝中使用屬性運算式>。
設定 Foreach 迴圈容器
您可以透過「SSIS 設計師」或以程式設計的方式來設定屬性。
如需有關可以在「SSIS 設計師」中設定之屬性的詳細資訊,請按下列其中一個主題:
如需有關如何在「SSIS 設計師」中設定這些屬性的詳細資訊,請按下列其中一個主題:
以程式設計的方式設定 Foreach 迴圈容器
如需有關以程式設計方式設定這些屬性的詳細資訊,請按一下以下主題:
|