今天給大家介紹 SSIS 2008 中的第一個容器:For Loop Container,
這個容器在實際的應用中用的不是很多,但是在某些特殊的場合還是很有用的。它用來實現對一個變數的迴圈,在迴圈之中對變數賦值,當滿足這個迴圈的終止條件
的時候,它就退出這個迴圈。它的功能類似於結構化程式設計語言的 Do While 結構, 比如下面的結構實現了 1 到10 相加的效果。
A = 1
B = 0
Do While A = 10
B = B + A
A = A + 1
End
目的:
我有一個表 Clients, 它包括2個欄位,ClientID 和 ClientName, 我要使用這個 For Loop
Container 在這個表裡增加10 個記錄。Client ID 列是個 IdentityKey, 可以自動賦值,ClientName
我使用 For Loop Container 給它賦值,下面是建立這個 For Loop Container 的步驟。
現在我就用一個例子來說明它的使用方法:
- 建立一個 SSIS Pakcage, 把它命名為 SSIS Containers
- 增加兩個系統變數:LoopValue, Int32, 它用來儲存我們迴圈中將要用到的迴圈變數的值;EndValue, Int 32, 它用來儲存迴圈的終止值,我把它設定為10.
- 把 For Loop Container 從工具箱中拖到 Control Flow 頁面中
- 雙擊這個 For Loop Container, 開啟 For Loop 的編輯器,這個編輯器的頁面和簡單,最重要的設定就在當前的 For Loop 頁中,它有三個屬性需要設定
- InitExpression: 初始值運算式,用來對迴圈變數的賦予一個初始值,這個迴圈變數可以是Package 層級的變數,也可以是 Container 層級的變數,在這個運算式裡我輸入 @LoopValue = 1
- EvalExpression:
判斷運算式,它接受一個條件判斷運算式,當不滿足這個條件運算式的時候終止當前的迴圈;當滿足條件的時候,執行下面的
AssignExpression 的操作,一直到不滿足這個運算式為止。在這個運算式裡輸入:@LoopValue <=@EndValue
- AssignExpression: 賦值運算式,它用來對迴圈變數賦值,在這個表達是裡輸入:@LoopValue = @LoopValue + 1。值得注意是這個運算式的設定一定要影響 EvalExpression 的值,否則的話就會形成一個無休止的迴圈。
- 在這個 For Loop Container 中加入一個 Execute SQL Task, 雙擊這個 Execute SQL Task 來編輯它的屬性
- 使用OLE DB 串連
- 選擇(建立)到 Clients 表所在資料庫的串連
- 在 SQL Statement 中輸入:
INSERT INTO dbo.Clients (ClientName) Values (‘Name’ + Convert (Varchar,?))
- 在Parameter Mapping 中建立一個新的變數映射,在 Varible name 下選擇 User:: LoopValue, Parametername 修改為 0,資料類型修改為 LONG
- 儲存這個 SSIS Package 並運行它。
- 在 SQL Server Management Studio 中查看Clients 表的內容,有10個記錄增加了。
結論
在我們這個例子中最主要的部分是設定3個迴圈的運算式,在一些個複雜的處理中,可能這些運算式的值是動態改變的,比如 EvelExpression 也就是迴圈終止的變數可以不是固定的值,等等。