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


简介
在前几篇文章中,我们关注使用增量加载方式加载数据。在本篇文章,我们将关注使用优先约束管理SSIS控制流中的工作流。你将添加一个新SSIS包到已存在的解决方案。
添加SSIS包
SSIS控制流包含任务、容器和优先约束。在SSIS控制流中任务和容器是可执行对象,优先约束用于控制任务和容器何时/是否执行。
为了操作控制流,打开叫做My_First_SSIS_Project解决方案。打开后在解决方案资源管理器右击SSIS包虚拟文件夹,选择新建SSIS包,如图6.1所示:

图6.1 新建SSIS包
当你点击新建SSIS包时一个名叫Package1.dtsx的包就会创建。右击Package1.dtsx选择重命名,如图6.2所示:

图6.2 重名称包名
包进入了重命名模式,如图6.3所示。重命名包为Precedence.dtsx

图6.3 键入包名
在你键入包名按回车键后,你会被提醒是否要同时重命名包对象?

图6.4 重命名包对名提醒
解决方案资源管理器下显示的SSIS包代表的是Solution\Project文件夹下叫做Package1.dtsx的文件,以及BIDS中的包对象(实际上单击SSIS包虚拟文件夹下的某个包,在属性中看到的信息就存储在文件夹的信息;双击SSIS包虚拟文件夹下的某个包,在属性中看到的就是BIDS中的信息)。当你看到图6.4的提示,你已经重命名文件夹下的文件;这个提示是询问是否需要重命名BIDS中的包对象。帮自己一个忙,通常点击“是”按钮。如果你选择“否”,你的文件和包对象将会不同名,这可能容易混淆。
添加一个脚本任务
缺少优先约束也是可行的,我们将在第一个演示中看到。首先让我们从控制流工具箱添加一个脚本任务到控制流。

图6.5 添加一个脚本任务到控制流
脚本任务可以说是SSIS中最强大的控制流任务。你可以使用它来创建其他SSIS任务的大部分功能。你也可以使用脚本任务添加新功能到的SSIS控制流。
右击脚本任务选择编辑,打开脚本任务编辑器:

图6.6 脚本任务编辑器
在这篇文章我们不会彻底探讨脚本任务的功能,但我们以它来开始。第一个你要检查的属性是ScriptLanguage.你可以选择Visual Basic或C#作为脚本任务中的编辑语言。你可以通过右侧的下拉菜单更改脚本任务的默认语言。我比较喜欢使用Visual Basic

图6.7 选择脚本语言
点击常规页,将Name属性更改为“Script Task 1”

图6.8 更改Name属性
回到脚本页,点击ReadOnlyVariables属性,文本框的右侧将出现一串省略号

图6.9 修改ReadOnlyVariables属性
点击省略号显示选择变量列表。我不喜欢列表显示的方式,我希望复选框和变量名称离得近些。我可以通过双击列表顶部复选框与名称的分隔栏来调整列宽。选择“System::TaskName”变量:

图6.10 选择变量
一旦你点击确定,脚本任务的ReadOnlyVariables属性如图6.11所示

图6.11 修改后的ReadOnlyVariables属性
为了我们的目的,单击“编辑脚本”按钮打开ssisscript如图12所示:

图6.12 ssisscript-Integration Services脚本任务
滚动鼠标直到你看到Public Sub Main().将下面代码添加到子程序:

        Dim sTaskName As String = Dts.Variables("TaskName").Value.ToString
MsgBox(sTaskName & " completed.")

你的代码看起来应该和图6.13相似:


图6.13 添加代码到Public Sub Main()
这段代码用来做什么呢?第一条语句在VB中创建一个字符串类型的sTaskName变量。当sTaskName创建时会分配一个值。这个值是由脚本任务的ReadOnlyVariables属性中的"“System::TaskName"变量分配。我们通过访问Dts命名空间的变量集合得到SSIS变量值,这就是“Dts.Variables”部分。接着是SSIS变量的名称——TaskName——用双引号引用,这就是("TaskName")部分。
我们接下来要获取值的属性,它是一个对象。因为它是一个对象,我们必须将属性转换成字符串以将它分配给字符串变量。我们通过ToString方法实现。
这就是如何将SSIS变量的值转到脚本任务变量(VB语言)。
下一行显示一个弹出消息框包含的任务的名字(sTaskName变量的值+" completed."字符串)。
直接点击右上角的红"X"关闭脚本任务代码编辑器。脚本会自动保存。点击确定按钮完成脚本任务配置。
我们准备测试一下。按下F5在调试器下启动SSIS包。你应该看到类似图10.14消息对话框:

图6.14 消息对话框
点击停止按钮停止调试
添加第二个脚本任务
右击Script Task 1选择复制,然后在控制流的空白处右击选择粘贴。一个新的脚本任务添加到控制流,名称是"Script Task 1 1",重命名新脚本任务为"Script Task 2"

图6.15 添加新脚本任务
在SSIS调试器下重新执行SSIS包。应该显示两个消息对话框(更可能是一个叠加在另一个上):

图6.16 执行SSIS包
因为脚本任务的名称(System::TaskName变量)显示在消息对话框,我们可以操作更多的复制和粘贴。停止调试。
Use Cases 0 and 1
前面的示例就是一个"use case"例子。这种use case演示了没有优先约束时会发生什么。我把它称作"use case 0".对于use case 1,让我们在Script Task 1和Script Task 2之间添加一个优先约束。为了完成这个,首先点击Script Task 1,在其下方会出现一个绿箭头的优先约束,点击优先约束并将它拉到Script Task 2.很多人试图刚好抵达下一个任务的边缘,不要这样!直接将优先约束拉到下一个任务的中间。

图6.17 添加优先约束
在SSIS调试器执行包,注意Script Task 1先执行:

图6.18 Script Task 1先执行
点击确定按钮完成Script Task 1.然后,Script Task 2开始执行

图6.19 Script Task 2后执行
注意Script Task 2要在Script Task 1完成后才执行。另外注意:这里的优先约束是默认的"成功"类型。意味着前面的任务(Script Task 1)必须完成并且成功才会执行后面的任务。
这里的语义是很重要的。优先约束起始于Script Task 1终止在Script Task 2。起始任务连接到优先约束的起点——有一个半圆点,它连接到起始任务;终点有一个箭头,它连接到终止任务。
优先约束求值。他们测试一个或多个条件,如果条件为真,约束允许终止任务开始执行。
"单线程"
"Single-threading" is one way to describe doing one thing at a time.使用优先约束是让SSIS控制流"单线程"的方式之一。使用优先约束是控制流中确定工作流的唯一方式。
在SSIS控制流中工作流是否有可能不明确?当然。为了演示,右击Script Task 1和Script Task 2之间的优先约束,然后选择删除。在控制流的空白单击一下然后按F4显示包属性。MaxConcurrentExecutables属性控制着在SSIS控制流有多少可执行文件可以同时执行。默认是设置为-1。默认值允许(CPU内核数+2)个可执行文件同时执行。例如,如果你有一四核服务器SSIS将允许六个并发执行。
将MaxConcurrentExecutables的属性设置成1,如图6.20所示:

图6.20 设置MaxConcurrentExecutables的属性
重新执行SSIS包。现在,每一次只有一个脚本任务执行。该顺序是不确定的,因此不可预测的。
停止调试,将MaxConcurrentExecutables设置回-1并保存SSIS包。
总结
在这篇文章中,我们在解决方案中添加了一个新的SSIS包,建立了我们的第一个脚本任务,它们之间通过一个成功优先约束连接。我们学习从SSIS脚本任务读取SSIS变量的值,以及MaxConcurrentExecutables属性。在下一篇,我们将看到更多SSIS优先约束的特点。

第六篇 Integration Services:初级工作流管理的更多相关文章

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

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

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

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

  3. 【译】第七篇 Integration Services:中级工作流管理

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

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

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

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

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

  6. 第十一篇 Integration Services:日志记录

    本篇文章是Integration Services系列的第十一篇,详细内容请参考原文. 简介在前一篇,我们讨论了事件行为.我们分享了操纵事件冒泡默认行为的方法,介绍了父子模式.在这一篇,我们会配置SS ...

  7. 【译】第十一篇 Integration Services:日志记录

    本篇文章是Integration Services系列的第十一篇,详细内容请参考原文. 简介在前一篇,我们讨论了事件行为.我们分享了操纵事件冒泡默认行为的方法,介绍了父子模式.在这一篇,我们会配置SS ...

  8. 第十五篇 Integration Services:SSIS参数

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

  9. 第十四篇 Integration Services:项目转换

    本篇文章是Integration Services系列的第十四篇,详细内容请参考原文. 简介在前一篇,我们查看了SSIS变量,变量配置和表达式管理动态值.在这一篇,我们使用SQL Server数据商业 ...

随机推荐

  1. HDU 1688 Sightseeing&HDU 3191 How Many Paths Are There(Dijkstra变形求次短路条数)

    Sightseeing Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  2. CSS3动画(动画已丢,看原文)

    原文:http://ued.1905.com:8880/sample/css3/base/test.html CSS3动画 简要展示了CSS3常用动画效果,以及所使用代码. bounce 复制 展开代 ...

  3. PHP+jQuery 长文章分页类 ( 支持 url / ajax 分页方式 )

    /* ******* 环境:Apache2.2.8 ( 2.2.17 ) + PHP5.2.6 ( 5.3.3 ) + MySQL5.0.51b ( 5.5.8 ) + jQuery-1.8 **** ...

  4. [收藏] 关于解决“进程com.android.phone意外停止”的方法 (未尝试)

    很多机油反应有这个情况,本人费劲九牛20虎之力终于克服之,这个现象一般出现在刚刷完系统会出现,甚至你怎么刷ROM这个现象依旧存在(崩溃不?)~~~有位机油刷了这个系统也出现了http://samsun ...

  5. PHP自动加载__autoload的工作机制

    PHP自动加载__autoload的工作机制 PHP的懒加载lazy loading 在 2011年11月12日 那天写的     已经有 4559 次阅读了 感谢 参考或原文   服务器君一共花费了 ...

  6. 原创:CentOS6.4配置solr 4.7.2+IK分词器

    本文原创,转载请注明出处 相关资源下载:http://pan.baidu.com/s/1pJPpiqv 1.首先说明一下 solr是java语言开发的企业级应用服务器,所以你首先安装好jdk,配置好j ...

  7. javaWeb中servlet开发(1)——helloworld

    1.servlet 1.1 servlet简介 1.2 servlet流程 不管是servlet还是jsp,所有的程序都是在服务器端处理的,所以必须了解一个servlet基本流程 servlet和JS ...

  8. tableView在加载数据成功之前先展示了footerView-医生工作台1期

    一进入这个页面先显示了footreView   解: 发现先走的requestData,但是请求接口成功的回调没走,走了configUI   configUI之后,走了requestData   所以 ...

  9. Ngrok 内网穿透利器

    Ngrok是什么 Ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.Ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放 为什么要使用Ngrok ...

  10. 启用“关闭自动根证书更新”,解决Windows系统各种卡顿的问题(Visual studio 卡、远程桌面mstsc卡、SVN卡)

    最近,发现在Win7下面一系列操作都会出现卡顿的情况: 1.  Visual studio 启动调试和关闭调试时,都会卡上半分钟左右 2.  使用远程桌面mstsc.exe,点击连接时,也会卡上半分钟 ...