分类: 数据库开发技术
2011-06-23 11:00:12
From:http://www.cnblogs.com/tylerdonet/archive/2011/04/08/2009890.html
容器
容器是SSIS为一个或多个任务提供一种结构的对象。例如可以执行一个循环直到到达边界条件,或者将一系列的task按逻辑组织在一起。一个容器也可以包含其他的容器。容器和任务(task)一样也放在Control Flow标签内,总共有四种类型的容器:任务宿主Task Host,Sequence序列,For循环和Foreach循环。
任务宿主Task Host Containers
任务宿主是单个task的默认容器,你在工具栏中找不到这种工具的图标,实际上即使不选择一个容器,单个task仍然包含在一个任务宿主中。SSIS的结构通过任务宿主来扩展变量和事物控制。
Sequence容器
Sequence容器可以处理package中的子任务,将package划分成更容易控制的小片段。下面是Sequence容器的一些应用:
在工具栏的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 | Public Sub Main() |
2 | Dim variables As Variables |
3 | If Dts.Variables.Contains("Counter") = True Then |
4 | Dts.VariableDispenser.LockOneForRead("Counter", variables) |
5 | End If |
6 | MsgBox("You are in iteration: " & CStr(variables("Counter").Value)) |
7 | Dts.TaskResult = Dts.Results.Success |
8 | End Sub |
注:VS2008环境内部分代码是Dts.TaskResult = ScriptResults.Success
图4-3
图4-4
Foreach循环容器
Foreach循环容器是一个很强大的容器,它可以对对象集合进行循环操作。在循环操作的过程中取得对象集合中相关值,对象集合的类型可以是文件等,在下面列举。还可以将对象集合中的值映射到变量中。对象的类型根据标签Collection中Enumerator属性的设置不同,这些属性如下:
我们来做一个和For循环容器类似的例子,在这个例子中我们将列举一个文件夹下的所有文件,使用对话框输出文件的名字信息。
01 | Public Sub Main() |
02 | Dim variables As Variables |
03 | If Dts.Variables.Contains("Counter") = True Then |
04 | Dts.VariableDispenser.LockOneForRead("Counter", variables) |
05 | End If |
06 | MsgBox("You are in iteration: " & CStr(variables("Counter").Value)) |
07 | Dts.TaskResult = Dts.Results.Success |
08 | End Sub |
注:VS2008环境内部分s代码是Dts.TaskResult = ScriptResults.Success
7. 点击OK退出编辑界面,执行这个package得到的结果如图4-6(弹出内容根据具体设置不同而不同)
图4-6
图4-7