本篇文章是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. 微信小程序 功能函数picker-view的弹出模态

    <view class="list"> <form bindsubmit="formSubmit"> <view class=&q ...

  2. Linux环境下安装配置Mysql

    首先我们的使用的是linux的 centOS6 版本 安装mysql: 1.查看有没有安装包 yum list mysql* 2.进行安装mysql:一般我们在服务器端安装的都是服务端( mysql- ...

  3. 高性能页面加载技术--BigPipe设计原理及Java简单实现

    1.技术背景 动态web网站的历史可以追溯到万维网初期,相比于静态网站,动态网站提供了强大的可交互功能.经过几十年的发展,动态网站在互动性和页面显示效果上有了很大的提升,但是对于网站动态网站的整体页面 ...

  4. Business Cards UVALive - 4384(画图看图。。)

    只能由三种情况 都横着放  都竖着放  横和竖交错放 那就去判断好了... 具体看代码 #include <iostream> #include <cstdio> #inclu ...

  5. maven简单理解

    前言: maven项目也是一个项目,类似于javaProject,javaWebProject,就是多了些功能,其他也没啥,所以大家接触的时候不要害怕! 1 . 帮你下载jar包 maven项目会有一 ...

  6. 【刷题】洛谷 P3872 [TJOI2010]电影迷

    题目描述 小A是一个电影迷,他收集了上百部的电影,打算从中挑出若干部在假期看完.他根据自己的口味和网上的介绍,对每部电影X都打了一个分数vX,表示自己喜欢的程度.这个分数的范围在-1000至1000之 ...

  7. 【BZOJ1864】三色二叉树(动态规划)

    [BZOJ1864]三色二叉树(动态规划) 题面 BZOJ 题解 首先把树给构出来. 设\(f[i][0/1]\)表示当前节点\(i\),是否是绿色节点的子树中最大/最小的绿色节点的个数和. 转移很显 ...

  8. apache.commons.io.FileUtils的常用操作

    至于相关jar包可以到官网获取 http://commons.apache.org/downloads/index.html package com.wz.apache.fileUtils; impo ...

  9. 20170520 DP阶段总结

    DP的力量不是无穷的. 但是,因为它叫做“动态规划”,它在OI界如鱼得水.这个“动态”不是指“离线”与“在线”,也不是什么“可持久化”.它只是把问题抽象为一个个“阶段”,在每一个“阶段”中作出或繁或简 ...

  10. Centos6.6下安装nginx1.6.3

    安装环境: [root@nginx ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@nginx ~]# uname -r 2. ...