SSIS中的容器和數據流—簡單介紹

容器

容器是SSIS爲一個或多個任務提供一種結構的對象。例如可以執行一個循環直到到達邊界條件,或者將一系列的task按邏輯組織在一起。一個容器也可以包含其他的容器。容器和任務(task)一樣也放在Control Flow標籤內,總共有四種類型的容器:任務宿主Task Host,Sequence序列,For循環和Foreach循環。

任務宿主Task Host Containers

任務宿主是單個task的默認容器,你在工具欄中找不到這種工具的圖標,實際上即使不選擇一個容器,單個task仍然包含在一個任務宿主中。SSIS的結構通過任務宿主來擴展變量和事物控制。

Sequence容器

Sequence容器可以處理package中的子任務,將package劃分成更容易控制的小片段。下面是Sequence容器的一些應用:

  • 將task歸類使其中一部分不再需要的task不能執行
  • 縮小一個容器中的變量範圍
  • 設置容器中所有task的屬性
  • 使用方法來保證一個task執行成功之後再執行下一個task

在工具欄的Control Flow中拖放一個Sequence容器,如圖4-1,左邊是一個Sequence容器,包含兩個task,右邊是一個Foreach循環容器,左邊容器中的task執行成功之後才能執行右邊容器中的task。

圖4-1

For循環容器

For循環容器像其他程序語言一樣,是一種創建循環方法的任務。在這種循環中SSIS設置一個初始值,在循環中不斷地重新賦值,只到不滿足邊界條件。

雙擊打開For循環容器的編輯頁面如圖4-2。InitExpression選擇項設置循環的初始條件。EvalExpression選擇項是每次循環都會重新賦值的,一旦它變成false,循環將停止。AssignExpression可以在每次循環時都改變表達式的值。

圖4-2

現在來試驗一個循環容器的用法,在這個例子中將試驗在循環中五次執行一段腳本,這是一個很簡單的例子,可以添加一些其他功能。

  1. 創建一個SSIS項目,將默認的package更名爲ForLoop.dtsx
  2. 打開這個package,川建一個新的變量Counter,在面板中右擊選擇Variables,點擊添加變量按鈕,默認變量類型爲int32
  3. 從工具箱中拖放一個Loop循環容器,雙擊打開編輯頁面,設置InitExpression爲@Counter = 0,循環開始時變量Counter的值設置爲0,EvalExpression選項設置爲@Counter < 5 and @Counter = @Counter + 1,在滿足條件@Counter<5是循環一直執行,並自加1,在Name選項中輸入Iterate through a Script,最後如圖4-3
  4. 在這個Loop循環容器中拖放一個腳本任務,雙擊這個腳本任務,取名爲Pop Up the Iteration
  5. 在腳本任務的編輯頁面如圖4-4,在ReadOnlyVariables選項中輸入Counter,向任務傳入一個參數變量
  6. 點擊Design Script,打開Visual Studio編輯環境,在Mian()方法體內輸入下面的代碼,代碼根據變量彈出對話框顯示Counter變量的值
1
2
3
4
5
6
7
8
Public Sub Main()
    Dim variables As Variables
    If Dts.Variables.Contains("Counter") = True Then
        Dts.VariableDispenser.LockOneForRead("Counter", variables)
    End If
    MsgBox("You are in iteration: " & CStr(variables("Counter").Value))
    Dts.TaskResult = Dts.Results.Success
End Sub

注:VS2008環境內部分代碼是Dts.TaskResult = ScriptResults.Success

  1. 退出Visual Studio編輯環境,回到原來的編輯界面,執行這個package結果如圖4-5,會出現5個彈出框,從0到4,Task的顏色變成綠色,然後右變成黃色。最終執行完之循環後又變成綠色。

圖4-3

圖4-4

Foreach循環容器

Foreach循環容器是一個很強大的容器,它可以對對象集合進行循環操作。在循環操作的過程中取得對象集合中相關值,對象集合的類型可以是文件等,在下面列舉。還可以將對象集合中的值映射到變量中。對象的類型根據標籤Collection中Enumerator屬性的設置不同,這些屬性如下:

  • For Each File Enumerator:對指定文件夾下的文件進行循環操作
  • For Each Item Enumerator:對手動設置的對象集合進行循環操作
  • For Each ADO Enumerator:對一個ADO集合中的表中的行進行循環操作
  • For Each ADO.NET Schema Rowset Enumerator:對一個ADO.NET模型進行循環操作
  • For Each From Variable Enumerator:對一組SSIS變量進行循環操作
  • For Each Nodelist Enumerator:對一組XML節點對象進行循環操作
  • For Each SMO Enumerator:對一組SQL管理對下你給進行循環操作

我們來做一個和For循環容器類似的例子,在這個例子中我們將列舉一個文件夾下的所有文件,使用對話框輸出文件的名字信息。

  1. 新建一個項目,將默認包重命名爲ForeachLoop.dtsx
  2. 拖拽一個Foreach循環容器,雙擊打開編輯界面,在General標籤內將它重命名爲Iterate through Files
  3. 在Collection標籤內,報紙Enumerator屬性默認值Foreach File Enumerator,設置Folder屬性內選擇一個文件較少的文件夾,這個例子不會修改文件,只是讀出文件的相關信息,在Files選項內保持默認值“.”,最後的界面如圖4-5
  4. 轉到變量映射標籤頁面內,在變量列內選擇<New variable…>,打開添加變量對話框。爲變量命名FileName,在Index列內變量的值默認0,因爲只對一個文件夾下的文件循環操作,所以保持默認值0不變,點擊OK退出編輯界面
  5. 拖放一個腳本任務放置到Foreach循環容器中,雙擊打開編輯界面重命名爲Read Files
  6. 轉到Script標籤,在ReadOnlyVariale屬性內設置變量FileName,點擊Design打開Visual Studio編輯環境,使用下面代碼代替Main()方法體內的代碼
1
2
3
4
5
6
7
8
9
10
<div class="cnblogs_Highlighter sh-gutter"><pre class="brush:vbnet;gutter:true;">Public Sub Main()
    Dim variables As Variables
    If Dts.Variables.Contains("Counter") = True Then
        Dts.VariableDispenser.LockOneForRead("Counter", variables)
    End If
    MsgBox("You are in iteration: " & CStr(variables("Counter").Value))
    Dts.TaskResult = Dts.Results.Success
End Sub
</pre>
</div>

注:VS2008環境內部分s代碼是Dts.TaskResult = ScriptResults.Success

  7.  點擊OK退出編輯界面,執行這個package得到的結果如圖4-6(彈出內容根據具體設置不同而不同)

圖4-6

圖4-7

 

轉:http://www.cnblogs.com/tylerdonet/archive/2011/04/08/2009890.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章