【译】第七篇 Integration Services:中级工作流管理
本篇文章是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:中级工作流管理的更多相关文章
- 第七篇 Integration Services:中级工作流管理
本篇文章是Integration Services系列的第七篇,详细内容请参考原文. 简介在上一篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcur ...
- 【译】第九篇 Integration Services:控制流任务错误
本篇文章是Integration Services系列的第九篇,详细内容请参考原文. 简介在前面三篇文章,我们创建了一个新的SSIS包,学习了脚本任务和优先约束,并检查包的MaxConcurrentE ...
- 【译】第二篇 Integration Services:SSIS数据泵
本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...
- 【译】第一篇 Integration Services:SSIS是什么
本篇文章是Integration Services系列的第一篇,详细内容请参考原文. Integration Services是一种在SQL Server中最受欢迎的子系统.允许你在各种数据源之间提取 ...
- 【译】第八篇 Integration Services:高级工作流管理
本篇文章是Integration Services系列的第八篇,详细内容请参考原文. 简介在前面两篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcu ...
- 【译】第六篇 Integration Services:初级工作流管理
本篇文章是Integration Services系列的第六篇,详细内容请参考原文. 简介在前几篇文章中,我们关注使用增量加载方式加载数据.在本篇文章,我们将关注使用优先约束管理SSIS控制流中的工作 ...
- 第八篇 Integration Services:高级工作流管理
本篇文章是Integration Services系列的第八篇,详细内容请参考原文. 简介在前面两篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcu ...
- 第六篇 Integration Services:初级工作流管理
本篇文章是Integration Services系列的第六篇,详细内容请参考原文. 简介在前几篇文章中,我们关注使用增量加载方式加载数据.在本篇文章,我们将关注使用优先约束管理SSIS控制流中的工作 ...
- 【译】第十五篇 Integration Services:SSIS参数
本篇文章是Integration Services系列的第十五篇,详细内容请参考原文. 简介在前一篇,我们使用SSDT-BI将第一个SSIS项目My_First_SSIS_Project升级/转换到S ...
随机推荐
- [转帖学习]Howto Shrink a Thin Provisioned Virtual Disk (VMDK)
Howto Shrink a Thin Provisioned Virtual Disk (VMDK) Posted by fgrehl on November 24, 2014Leave a com ...
- 【设计模式】—— 原型模式Prototype
前言:[模式总览]——————————by xingoo 模式意图 由于有些时候,需要在运行时指定对象时哪个类的实例,此时用工厂模式就有些力不从心了.通过原型模式就可以通过拷贝函数clone一个原有的 ...
- html template & iframe
html template & iframe https://bbs.csdn.net/topics/390123946 据说可以利用某些浏览器bug绕过跨域限制,可以也研究下; 由于浏览器对 ...
- UVA 12633 Super Rooks on Chessboard(FFT)
题意: 给你一个R*C的棋盘,棋盘上的棋子会攻击,一个棋子会覆盖它所在的行,它所在的列,和它所在的从左上到右下的对角线,那么问这个棋盘上没有被覆盖的棋盘格子数.数据范围R,C,N<=50000 ...
- CyclicBarrier用法
CyclicBarrier和CountDownLatch一样,都是关于线程的计数器. 用法略有不同,测试代码如下: 1 public class TestCyclicBarrier { 2 3 pri ...
- 洛谷 P1850 换教室 解题报告
P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1≤i≤n) ...
- linux内核设计与实现一书阅读整理 之第十八章
CHAPTER 18 调试 18.1 准备开始 需要的是准备是: - 一个bug - 一个藏匿bug的内核版本 - 相关内核代码的知识和运气 重点: 想要成功的进行调试,就取决于是否能让这些错误重现. ...
- debian7编译安装tengine添加lua和ldap模块
1.安装开发环境 # aptitute update # aptitude install -y build-essential # aptitude install -y libldap2-dev ...
- 解题:洛谷2633 Count on a tree
题面 在树上建主席树...... 每个点从父亲那里建过来,最后建出来就是从根到$i$这条链上的主席树,查询的时候一边差分一边查询 ($cmt[u]+cmt[v]-cmt[lca(u,v)]-cmt[a ...
- SQL联合查询中的关键语法
http://www.cnblogs.com/aaapeng/archive/2010/01/20/1652151.html 联合查询效率较高.以下例子来说明联合查询的好处 t1表结构(用户名,密码) ...