本篇文章是Integration Services系列的第七篇,详细内容请参考原文


简介
在上一篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcurrentExecutables属性。
这一篇我们将检查、演示并测试优先约束赋值为"成功"、"完成"、"失败"时对工作流的影响。
约束赋值
如果你按照前一篇的步骤操作过,打开My_First_SSIS_Project解决方案下的Precedence.dtsx包。在Script Task 1和Script Task 2中创建一个优先约束。

图7.1 添加优先约束
快速回顾
在这一系列的第六篇的结尾部分,我included这个重要的简介:
这里的语义是很重要的。优先约束起始于Script Task 1和终止在Script Task 2。起始任务连接到优先约束的起点——有一个半圆点,它连接到起始任务;终点有一个箭头,它连接到终止任务。
优先约束求值。他们测试一个或多个条件,如果条件为真,约束允许终止任务开始执行。
成功
为了演示,在BIDS调试器下执行包。首先会出现Script Task 1的消息对话框:

图7.2 Script Task 1的消息对话框
当你点击消息对话框中的确定按钮,Script Task 1成功(背景变绿色),优先约束求值为真,Script Task 2执行并显示消息对话框:

图7.3 Script Task 2的消息对话框
当你点击Script Task 2消息对话框中的确定按钮,Precedence包成功完成:

图7.4 Precedence包成功执行
完成(成功)
右击优先约束查看可用的配置选项。在顶部是"编辑",下面接着是"成功"、"失败"、"完成":

图7.5 配置约束选项
如果你点击完成,优先约束从绿色变成蓝色:

图7.6 "完成"优先约束
优先约束现在被配置的值是"完成"。不管Script Task 1成功还是失败,只要Script Task 1执行完成,优先约束进行求值,然后Script Task 2开始执行。
在SSIS调试器下测试执行包。一旦Script Task 1成功,Script Task 2就开始执行:

图7.7 "完成"值Script Task 1成功
这里只测试了前一个任务成功时,"完成"选项所做的操作。如果前一任务失败,"完成"选项会如何操作呢?
完成(失败)
首先我们需要用一种方法产生错误。打开Script Task 1编辑器,点击"编辑脚本"按钮。你是否知道消息对话框能返回值?他们返回的整型值,代表按下按钮的类型,并关闭消息框。要实现这一功能,修改Public Sub Main()中的VB代码:

Public Sub Main()
Dim sTaskName As String = Dts.Variables("TaskName").Value.ToString
Dim iResponse As Integer = MsgBox("Succeed " & sTaskName & "?", MsgBoxStyle.YesNo, sTaskName)
If iResponse = MsgBoxResult.Yes Then
Dts.TaskResult = ScriptResults.Success
Else
Dts.TaskResult = ScriptResults.Failure
End If
End Sub

语句声明一个整型的iResponse变量,并将MsgBox函数的返回值赋给它。MsgBox函数根据用户点击的消息框按钮返回一个值。If-Else代码用于响应iResponse的值,如果按下"是"按钮(MsgBoxResult.Yes)返回成功,否则返回失败。
关闭VB脚本编辑器,然后点击确定按钮关闭脚本任务编辑器。在BDIS调试器下执行包,如果没有出错,你的第一条消息框应该如图所示:

图7.8 Script Task 1消息框
如果你点击"是"按钮,这个完成优先约束将求值然后Script Task 2会执行。但这在前面已经测试过了。如果你点击"否"按钮,Script Task 2同样会执行:

图7.9 Script Task 1失败,Script Task 2依旧执行
如果你一直是遵循我的操作,有可能你不会看到图7.9那样的消息框,相反你会看到一个类似Script Task 1的消息框。为什么?是否记得,我们是通过复制、粘贴Script Task 1得到的Script Task 2.有时,过多的用于识别复制的脚本任务的元数据,将导致从一个脚本任务的代码在复制和粘贴的另一个脚本任务的上下文中执行。这样的概率很小,但偶尔会发生。为了达到期望的结果,打开Script Task 2编辑脚本添加一行注释或随便点击。这种改动会引起BIDS重新评估Script Task 2中的脚本。随后脚本任务就会按设计执行。
现在我们知道约束选项的值为"完成",不管前面的任务是成功还是失败。让我们将选项重新设置为"成功"!
成功(失败)
右击优先约束将选项值设置为"成功",约束从蓝色变为绿色:

图7.10 约束选项值设置为"成功"
F5执行包,当提示消息框显示succeed Script Task 1? 点击"否"按钮导致它失败。如图7.11,Script Task 2就不会执行:

图7.11 约束选项为"成功",前一任务失败后面的任务不会执行
我们可以用"成功"选项停止执行如果发生意外或错误。
失败(失败+成功)
停止调试,右击优先约束选择"失败":

图7.12 配置约束选项
约束从绿色变为红色:

图7.13 约束选项值设置为"失败"
在SSIS调试器下执行包,当提示消息框显示succeed Script Task 1? 点击"否"按钮。succeed Script Task 2将会执行:

图7.14 约束选项为"失败",前一任务失败后面的任务执行
点击重新启动按钮,当包重新启动,Script Task 1显示提示,点击"是"按钮,Script Task 1成功执行。优先约束配置的是"失败",条件求值为假,Script Task 2不会执行:

图7.15 约束选项为"失败",前一任务成功后面的任务不会执行
总结
这一篇文章我们使用SSIS脚本任务测试各种use cases状态。We then used the test states to demonstrate how SSIS precedence constraints respond to Success, Completion, and Failure conditions in preceding tasks.
下一篇,我们将学习高级工作流管理。

【译】第七篇 Integration Services:中级工作流管理的更多相关文章

  1. 第七篇 Integration Services:中级工作流管理

    本篇文章是Integration Services系列的第七篇,详细内容请参考原文. 简介在上一篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcur ...

  2. 【译】第九篇 Integration Services:控制流任务错误

    本篇文章是Integration Services系列的第九篇,详细内容请参考原文. 简介在前面三篇文章,我们创建了一个新的SSIS包,学习了脚本任务和优先约束,并检查包的MaxConcurrentE ...

  3. 【译】第二篇 Integration Services:SSIS数据泵

    本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...

  4. 【译】第一篇 Integration Services:SSIS是什么

    本篇文章是Integration Services系列的第一篇,详细内容请参考原文. Integration Services是一种在SQL Server中最受欢迎的子系统.允许你在各种数据源之间提取 ...

  5. 【译】第八篇 Integration Services:高级工作流管理

    本篇文章是Integration Services系列的第八篇,详细内容请参考原文. 简介在前面两篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcu ...

  6. 【译】第六篇 Integration Services:初级工作流管理

    本篇文章是Integration Services系列的第六篇,详细内容请参考原文. 简介在前几篇文章中,我们关注使用增量加载方式加载数据.在本篇文章,我们将关注使用优先约束管理SSIS控制流中的工作 ...

  7. 第八篇 Integration Services:高级工作流管理

    本篇文章是Integration Services系列的第八篇,详细内容请参考原文. 简介在前面两篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcu ...

  8. 第六篇 Integration Services:初级工作流管理

    本篇文章是Integration Services系列的第六篇,详细内容请参考原文. 简介在前几篇文章中,我们关注使用增量加载方式加载数据.在本篇文章,我们将关注使用优先约束管理SSIS控制流中的工作 ...

  9. 【译】第十五篇 Integration Services:SSIS参数

    本篇文章是Integration Services系列的第十五篇,详细内容请参考原文. 简介在前一篇,我们使用SSDT-BI将第一个SSIS项目My_First_SSIS_Project升级/转换到S ...

随机推荐

  1. ByValue和ByPropertyName的区别

    ByValue 以Get-Service命令为例,它的帮助文件中关于-Name参数是这样解释的: 1. "WinRM" | Get-Service 2. "Trusted ...

  2. Python Matplotlib绘图库 安装

    一般我们在做科学计算的时候,首先会想到的是matlab,但是呢,一想到matlab安装包那么大,我就有点不想说什么了. Matplotlib 是python最著名的绘图库,它提供了一整套和matlab ...

  3. 12:打印1到最大的n位数

    面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...

  4. 利用userData实现客户端保存表单数据

    对于多数网页制作的朋友,实现在客户端保存在网页表单上的信息,比较多的是采用Cookie技术来实现,这些功能例如:下拉列表框选择的选项,文本框输入的数据等.事实上,我们可以利用微软DHTML默认行为中的 ...

  5. UVAlive5135_Mining Your Own Business

    好题.给一个无向图,求最少染黑多少个点后,使得任意删除一个点,每一个点都有与至少一个黑点联通. 一开始的确不知道做.看白书,对于一个联通分量,如果它有两个或以上的割点,那么这个分量中间的任何一个点都是 ...

  6. P4329 [COCI2006-2007#1] Bond

    题意翻译 有n 个人去执行n 个任务,每个人执行每个任务有不同的成功率,每个人只能执行一个任务,求所有任务都执行的总的成功率. 输入第一行,一个整数n (1≤n≤20 ),表示人数兼任务数.接下来n ...

  7. java 自动装箱

    Java 编译器把原始类型自动转换为封装类的过程称为自动装箱(autoboxing),相当于调用包装类的valueof方法.举例说明: 源码: 编译之后的代码:

  8. Stamp Rally

    Stamp Rally 最大值最小,可以二分,然后并查集看能不能到z个点 但是询问过多,并且发现每次二分要加入的点并不是所有的m条边 于是就考虑整体二分 并查集的处理是重点: 对于一般的dfs分治树, ...

  9. laravel Collection mapToDictionary 例子

    源码 示例 <?php require __DIR__ . '/bootstrap/app.php'; $arr = [ [ 'name' => 'John', 'age' => 2 ...

  10. dubbo与springcloud对比与面试

    对比:具体见此博客: http://www.sohu.com/a/108961261_468650 dubbo:组装机 springcloud:品牌机 打个不恰当的比喻:使用Dubbo构建的微服务架构 ...