[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

时间:2021-11-06 10:27:55

简介

在之前的章节中,我们学习了增量载入数据. 本文中.我们通过优先约束(Precedence Constraints)来管理SSIS的工作流.

添加一个SSIS包

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 1

将新建的Package1.dtsx 改为 Precedence.dtsx  :

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 3

添加 Script Task

拖个 Script Task 到Control Flow:

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 5

Script Task估计是SSIS 里面最强大的组件了.你可以创建很多功能. 同样的,你能通过Script Task 控制SSIS工作流.

右击Script Task 点 “Edit” :

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 6

点击General ,把Name 改为“Script Task 1”:

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 8

返回 Script 页面,然后点击 ReadOnlyVariables property:

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 9

点击省略号会显示一个变量列表 .  选择 “System::TaskName” 变量 :

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 10

点击确认以后, ReadOnlyVariables 属性显示如下:

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 11

点击 “Edit Script” 按钮打开脚本编辑页面图12:

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 12

拖动滚动轴,直到你看到 Sub Main(). 然后添加如下代码 ( 我喜欢用C#….所以我图片都会更新为C#的)  :

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

        MsgBox(sTaskName & " completed.")

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 13

在SSIS中 变量有范围,并且归于某个namespaces. 每个SSIS变量都有个Namespace. 默认有两个namespace : System 和 User  . TaskName 属于System namespace.

按F5来测试一下 :

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 14

添加第二个 Script Task

复制 Script Task 1 :

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 15

把复制了的 Script Task 1 1 改名为 “Script Task 2”:

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 16

再执行一下:

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 17

用例 0 和1

先前是一个简单用例. 示例了在没有优先约束的情况下,工作流会怎么运行. 我称之为用例 0 ( “Use Case 0”).  我们在Script Task 1 和 Script Task 2之间加个优先约束.看下用例 1 的情况. 优先约束是 Script Task1 延伸出来的一个绿色尖头. 如图 18 :

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 18

点击优先约束,然后拖到 Script Task 2:

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 19

再次执行 包, 如下图 Script Task 1 先执行 :

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 20

点击OK按钮以后,  Script Task 1 完成执行,接着 Script Task 2 开始执行:

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 21

注意:  Script Task2 是在Script Task 1 完成以后执行. 另外一个就是该优先约束默认的类型是”OnSuccess” . 也就是说. 只有成功执行Script Task 1之后,优先约束才会验证.

这点非常重要. 优先约束(originates) Script Task 1(originates) 终于 (terminates )Script Task 2. 优先约束起点为箭尾连接的任务,而箭头所指的任务为终点.

优先约束会验证一个或多个条件,如果条件为Ture 那么终端任务才会执行.

“单线程"

“单线程”就是一次执行一个东西. 使用优先约束可以在SSIS控制流中实现”单线程” . 优先约束是Control Flow中唯一设定确定工作流(deterministic workflow ) 执行顺序的方法 .

那么非确定的工作流( non-deterministic)可以在SSIS Control Flow设定么?  右击 Script Task 1 与 Script Task 2中间的优先约束,然后点击Delete.然后随意点击空白区域,按F4 调出属性(properties)面板. MaxConcurrentExecutables 用来设定当前SSIS Control Flow 可以同事执行多少个并发的任务 . 默认值是-1 . 默认的并发数量是CPU的核心数+2 .比如你有个4核CPU,那么同时可以执行6个任务.

我们把属性设为1 , 再次执行包的时候我们会看到,一次只执行了一个 Script Task :

[译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

图 22

原文连接 : http://www.sqlservercentral.com/articles/Integration+Services+(SSIS)/91649/

资源: My_First_SSIS_Project_After_Step_6.zip