SSIS - 5.优先约束
一、优先约束和执行逻辑
任务和容器是SSIS中的可执行文件,一个优先约束连接着两个可执行文件:优先的可执行文件和约束的可执行文件,如下图。
它的执行逻辑如下图:
1)先执行优先可执行文件
2)判断优先约束的结果是否为真
3)若为真,则执行约束可执行文件,否则结束进程
二、优先约束的设置
优先约束的判断结果取决于优先的可执行文件执行时的返回结果是否与优先约束的设置或表达式结果相匹配。一个可执行文件的执行结果可以是成功或者失败。优先的可执行文件可以选择3种执行结果:成功、失败和完成。下面是优先约束的设置及对应的优先可执行文件执行的返回结果。
三、下面实际操作一下:
1)创建并打开一个SSIS的空白包,定义变量V,数据类型为int32,默认值为1。
2)拖拽一个脚本任务到设计区域,重命名为“Source”,然后渎复制这个脚本任务并重命名为“Destination”,然后使用优先约束连接,如下图。
3)执行包,可以看到执行成功了。
4)单击“停止调试”按钮关闭执行,打开脚本任务“Source”和“Destination”后可以看到里面的代码。
5)修改脚本任务“Source”中95行的代码如下。
Dts.TaskResult = (int)ScriptResults.Failure;
6)再执行包,可以看到执行错误。这是以为“Source”返回的是“失败”,而优先约束定义的是执行成功后继续,这样,包执行完“Source”任务后就会停止执行。
7)在绿色的线上右键,然后“失败”。
8)再次执行包,可以看到“Destination”任务执行成功了,这是因为“Source”返回的失败与优先约束中的设置匹配。
9)上图红色的箭头线上右键->选择“编辑...”->打开优先约束编辑器。
在约束选项中,计算操作中包含一下4种:
-
- 约束
- 表达式
- 表达式和约束
- 表达式或约束
10)选择“表达式和约束”->单击表达式右侧的“...”打开表达式编辑器->写入表达式"@[User::V]==1"后单击OK。
11)执行包,"Destination"执行成功。这是由于表达式和约束返回的都是True。图中“fx”表达优先约束中包含有表达式。
12)右键红色的线->选择“Success”->将变量V的值改为2,执行包,“Destination”没有执行,因为表达式@[User::V]==1返回的结果是False。
13)打开优先约束编辑器->修改约束条件为“表达式或约束”。
14)再次执行包,可以看到“Destination”执行成功了,因为约束和表达式是“或”的关系(True || False = True)