SSIS – For Loop Container

今天给大家介绍 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 也就是循环终止的变量可以不是固定的值,等等。

原文地址:https://www.cnblogs.com/martin-roger/p/5937862.html