本篇文章是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. ACM数论之旅16---母函数(又名生成函数)(痛并快乐着(╭ ̄3 ̄)╭)

    (前排出售零食瓜子) 前言: 母函数是个很难的东西,难在数学 而ACM中所用的母函数只是母函数的基础 应该说除了不好理解外,其他都是非常简单的 母函数即生成函数,是组合数学中尤其是计数方面的一个重要理 ...

  2. Webpack简易入门教程

    <!-- 其实网上关于webpack的教程已经很多了,但是本人在学习过程中发现很多教程有错误,或者写的很不全面,结果做的过程出现各种各样的问题,对新手不但不友好还会让人浪费很多不必要的时间.所以 ...

  3. P3701 「伪模板」主席树

    题目背景 byx和手气君都非常都非常喜欢种树.有一天,他们得到了两颗奇怪的树种,于是各自取了一颗回家种树,并约定几年后比一比谁种出来的树更加牛x. 题目描述 很快,这棵树就开花结果了.byx和手气君惊 ...

  4. PHP Warning: strftime(): It is not safe to rely on the system's timezone set

    当运行一些程序时,在httpd日志中会有如下警告日志: PHP Warning:  strftime(): It is not safe to rely on the system's timezon ...

  5. phpredis -- Redis Arrays用法

    Redis Arrays 来自地址:https://github.com/phpredis/phpredis/blob/master/arrays.markdown#readme 扩展原文件array ...

  6. go语言操作mongodb

    Install the MongoDB Go Driver The MongoDB Go Driver is made up of several packages. If you are just ...

  7. Lnmp上安装Yaf学习(二)

    上一节主要实践了在Lnmp上安装Yaf扩展,那么这一节将测试 Yaf 的一个简单demo的运行. 一.通过Lnmp 创建 vhost 文件 [root@localhost yaf-3.0.6]# ln ...

  8. 团体程序设计天梯赛 L1-049. 天梯赛座位分配(测试数据+不同方法)

    Data: /*33 2 1#11 4 7 10 13 16 19 22 25 2831 33 35 37 39 41 43 45 47 4951 53 55 57 59 61 63 65 67 69 ...

  9. Hystrix之Dashboard的常见问题

    Hystrix Dashboard (断路器:Hystrix 仪表盘)只监控一个实例,而Turbine监控多个实例,要使用Turbine必须使用Hystrix,因为Turbine是为了监控断路器的状态 ...

  10. Levenshtein Distance莱文斯坦距离算法来计算字符串的相似度

    Levenshtein Distance莱文斯坦距离定义: 数学上,两个字符串a.b之间的莱文斯坦距离表示为levab(|a|, |b|). levab(i, j) = max(i, j)  如果mi ...