peis吧 关注:7贴子:48
  • 0回复贴,共1

[译]Stairway to Integration Services Level 8 - SSIS 工作流管

只看楼主收藏回复

介绍
在前两个章节我们,建立了一个新的SSIS包,简单的使用了一下scripting还有优先约束,并且测试了MaxConcurrentExecutables 属性. 同时实验了 “On Success”, “On Completion”, 和“On Failure”几种类型的优先约束.
本文中我们继续深入SSIS工作流管理,学习SSIS变量并且通过表达式来处理复杂的优先约束.
关于变量
打开 Precedence.dtsx package,菜单栏点SSIS下拉菜单,然后选Variables.

图 1
Variables 窗口显示如下:

图 2
在 Variables 窗口顶端,有一个工具栏,按钮如下:
添加变量按钮 -
删除变量按钮 -
移动变量按钮 -
变量过滤还有列选择 -

图 3
变量与命名空间
再SSIS包中默认有两个命名空间: System 和 User. 你没法增加System的变量. 不过你可以添加新的User 变量或者新建一个命名空间. 新建命名空间需要显示 namespace字段,然后修改字段文本即可 .
添加一个值
为了做演示,让我们添加一个SSIS变量 . :

图 4
重命名变量名为 “MyBool” 然后把数据类型改为 Boolean,如下图:

图 5
表达式及优先约束
右击 Script Task 1 和 Script Task 2之间的优先约束,然后点击”Edit..”:

图 6
我们看到两个groupbox . 一个是“Constraint options” 和“Multiple constraints”.
把 “Evaluation operation”修改为to “Expression” 然后把r “@MyBool” 输入到 Expression 文本框:

图 10
注意,布尔变量MyBool 的默认值是False . 此外写入Expression 文本框的表达式结果必须为布尔值(True 或 False ). :

图 12
我们执行下SSIS包 :

图 13
因为这次优先约束只判断 变相@MyBool. 而变量 @MyBool 默认为 False ,所以Script Task 2 永远不会执行.
接着做更多测试. 打开 Script Task 1 编辑器. 点击 ReadWriteVariables 属性. 然后选择. User::MyBool variable 变量 :

图 14

图 15
点击Edit Script按钮输入以下代码
Public Sub Main() Dim sTaskName As String = Dts.Variables("TaskName").Value.ToString Dim iResponse As Integer = _MsgBox("Set MyBool to True?", MsgBoxStyle.YesNo, sTaskName) If iResponse = MsgBoxResult.Yes Then Dts.Variables("User::MyBool").Value = True Else Dts.Variables("User::MyBool").Value = False End If Dts.TaskResult = ScriptResults.Success End Sub
C#版
public void Main() { // TODO: Add your code here string sTaskName = Dts.Variables["TaskName"].Value.ToString(); DialogResult iResponse = MessageBox.Show("Succeed" + sTaskName + "?", sTaskName, MessageBoxButtons.YesNo); if (iResponse == DialogResult.Yes) Dts.Variables["User::MyBool"].Value = true; else Dts.Variables["User::MyBool"].Value = false; }
再次运行包:


IP属地:中国香港1楼2014-10-14 18:07回复