第七篇 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包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcu ...
- 【译】第八篇 Integration Services:高级工作流管理
本篇文章是Integration Services系列的第八篇,详细内容请参考原文. 简介在前面两篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcu ...
- 第六篇 Integration Services:初级工作流管理
本篇文章是Integration Services系列的第六篇,详细内容请参考原文. 简介在前几篇文章中,我们关注使用增量加载方式加载数据.在本篇文章,我们将关注使用优先约束管理SSIS控制流中的工作 ...
- 【译】第六篇 Integration Services:初级工作流管理
本篇文章是Integration Services系列的第六篇,详细内容请参考原文. 简介在前几篇文章中,我们关注使用增量加载方式加载数据.在本篇文章,我们将关注使用优先约束管理SSIS控制流中的工作 ...
- 第十五篇 Integration Services:SSIS参数
本篇文章是Integration Services系列的第十五篇,详细内容请参考原文. 简介在前一篇,我们使用SSDT-BI将第一个SSIS项目My_First_SSIS_Project升级/转换到S ...
- 第十四篇 Integration Services:项目转换
本篇文章是Integration Services系列的第十四篇,详细内容请参考原文. 简介在前一篇,我们查看了SSIS变量,变量配置和表达式管理动态值.在这一篇,我们使用SQL Server数据商业 ...
- 第十三篇 Integration Services:SSIS变量
本篇文章是Integration Services系列的第十三篇,详细内容请参考原文. 简介在前一篇我们结合了之前所学的冒泡.日志记录.父子模式创建一个自定义的SSIS包日志记录模式.在这一篇,我们将 ...
- 第十二篇 Integration Services:高级日志记录
本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...
随机推荐
- 找1到n所有整数出现1的个数
编程之美2.4 n=12时,1,11,12这3个数包含1,所以1的个数是5. Line 9是为了防止factor溢出. #include <iostream> #include <s ...
- 【液晶模块系列基础视频】1.2.iM_RGB模块介绍
[液晶模块系列基础视频]1.2.iM_RGB模块介绍(上) [液晶模块系列基础视频]1.2.iM_RGB模块介绍(下) ============================== 技术论坛:http ...
- HDU 1003 基础dp 最大连续序列和
常常做错的一道题.. 因为总是要有一个长度的 所以一开始的s与e都是1 maxx也是a[1] 然后再求 从i=2开始 在这里注意 me永远是当前i 而ms则可能留在原地 可能直接等于i 判断条件就是当 ...
- Linux 计划任务 Crontab 笔记与总结(2)Crontab 的基本组成与配置
[Crontab 的基本组成] ① 系统服务 CROND:每分钟都会从配置文件刷新定时任务 ② 配置文件 :文件方式设置定时任务 ③ 配置工具 crontab:用途调整定时任务 [配置文件的配置文件格 ...
- [转]为何TCP/IP协议栈设计成沙漏型的
http://m.blog.csdn.net/blog/dog250/18959371 前几天有人回复我的一篇文章问,为何TCP/IP协议栈设计成沙漏型的.这个问题问得好!我先不谈为何它如此设计,我一 ...
- PHP学习(四)---PHP与数据库MySql
主要有以下的内容: 1.怎么连接数据库 2.怎么操作数据库 (1)怎么执行sql语言 (2)怎么处理返回的结果集 方法一:面向过程(已经过时,只是了解) 假设: $username=your_name ...
- 在Delphi下基于MapWinGIS添加和删除图层标注的方法
unit Form_MainU; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ...
- mysql查询昨天本周上周上月
昨天 $yestoday = date("Y-m-d 00:00:00",strtotime('-1day'));$today = date("Y-m-d 00:00:0 ...
- 使用JSONP跨域请求数据
下面代码,可以使用JSONP进行跨域请求数据,Insus.NET记录以下,以备忘记.
- 【转】简单的 Laravel 5 REST API
Introduction Almost all successful internet based companies have APIs. API is an acronym for Applica ...