介绍
前一个章节我们对SSIS的优先约束做了初步了解,并且实验了MaxConcurrentExecutables 包属性的设置.
本文将测试“On Success”, “On Completion”, 和“On Failure”几种类型的优先约束.
约束评估
On Success
在此就不重复了,请看上篇文章
On Completion
右击优先约束,会显示配置选项:
图 5
点击 Completion, 优先约束的先会由绿色变为黑色:
图 6
当配置选项改为“On Completion”之后,只要Script Task 1 执行完毕,不管是成功还是失败. 条件约束都会执行 Script Task2 :
我们来测试下执行失败情况.
首先,我们来要制作一个错误.打开 Script Task 1 然后点“Edit Script” 按钮. 我们通过 Message Boxes的返回值来控制执行的成功或者失败.以下是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
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.TaskResult = (int)ScriptResults.Success; else Dts.TaskResult = (int)ScriptResults.Failure; }
Script Task 1执行后弹出的消息框我们选No,这时候任务一就执行’失败’,但是Script Task 2 还是执行了.
图 8
图 9
如果你一直跟着我的文章一步步坐过来,有可能你执行以后看到的类似 Script Task1 的执行信息而看不到图9的界面.之所以这样是因为我们之前直接拷贝了 Script Task 1 然后改名为Script Task 2. 有时候就会发生Task2 执行被拷贝的Task1的情况 . 虽然很少碰到,但是还会发生(这尼玛不是坑爹么..绝对是Bug) . 要解决这个问题.打开Script Task2 随意编辑一下在保存. SSDT就会’刷新’ . 然后执行就正常了. (我是直接关掉SSDT再开项目 o(╯□╰)o) .
现在让我们从新设置回“On Success”看看效果
再次测试 On Success
图 10
消息框我们选择”No” 按钮, Script Task2 不会继续执行.
图 11
On Failure
现在我们测试 On Failure :
图 13
执行包以后,消息框我们选择’NO’按钮. Script Task 2会继续执行. :
图 14
当我们选择 Yes的时候 Script Task2 就不执行了.
图 16
原文地址: http://www.sqlservercentral.com/articles/Integration+Services+(SSIS)/91651/