在SSIS的体系结构中,Package是SSIS的最重要的部分,从本质上来讲,Package是一个有序地执行任务的单元。Package的核心是控制流(Control Flow),用于协调包中所有组件的执行顺序。数据流(Data Flow)是控制流中的核心组件,用于把数据提取到服务器内存中,转换数据并把数据写入到目标结构中。
一,控制流
控制流用于协调包中所有组件的执行顺序,这些组件由Task和容器构成,并且受到优先约束的控制。
控制流由三大组件构成,分别是Task,容器和优先约束。
- 容器用于把Task集合到一起,除了视觉上的分组外,容器还允许用户定义作用域在容器范围内的变量和事件处理程序。
- Task是一个独立的工作单元,为包提供了实现特定功能的接口。
- 优先约束不仅把Task连接到一起,而且指定Task执行的顺序。
Task按照优先约束(Precedence Constraint)规定的顺序执行下去。在一个Task工作之前,Package必须完成其前面Task,不管前面的Task执行的结果是成功、失败或者完成。
1,优先约束
优先约束是把Task连接到一起的连接器,而且定义了Task的执行顺序。优先约束定义了Task的执行路径和条件,只有满足优先约束的条件时,才能按照连接路径继续执行下一个Task。例如,在下图所示的控制流中,优先约束把Execute SQL Task和 Data Flow Task连接到一起,并且规定只有Execute SQL Task都执行完成之后,才会执行Data Flow Task。

为两个Task创建优先约束,必须设置约束值或表达式,当约束值或表达式为True时,满足约束条件。
优先约束的求值运算(Evaluation operation)有四种:
- 约束(Constraint),根据约束的结果来确定约束的状态
- 表达式(Expression),根据表达式的结果来确定约束的状态
- 表达式和约束(Expression and Constraint),根据表达式和约束结果的组合来确定约束的状态
- 表达式或约束(Expression or Constraint),根据表达式或约束的结果之一来确定约束的状态
根据约束选项的不同,约束值有Value和表达式两种类型:
- 当求值选项为约束时,约束值有:成功(Success)、失败(Failure)和完成(Completion);
- 当求值选项为表达式时,需要用户编写表达式;
约束值共有三种有效值,他们的含义是:
- 成功约束:表示只有在前置任务或容器成功时,才会执行当前的任务;
- 失败约束:表示只有在前置任务或容器失败时,才会执行当前的任务;
- 完成约束:表示只有在前置任务或容器完成(不管失败或成功)时,才会指定当前的任务
当一个Task上创建了多个约束时,必须设置多个约束的逻辑组合。当设置为逻辑与时,多个优先约束同时为True,才满足优先约