我的 SSIS 包的控制流未按预期运行。
我想要达到的目标:
测试是否在 SQL Server 上启用了 CLR
SELECT value FROM sys.configurations WHERE name = 'clr enabled'
- 如果
value == 0
,尝试启用 CLR 并显示消息Server is configured.
- 如果
value == 1
,显示消息Server is configured.
此流程按预期工作。不过,我想,如果value == 0
,之后继续MessageBox Enable CLR on Server
。
现在,发生的事情是这样的:
value == 0
[CLR Enabled on Server] 将控制权交给[Enable CLR on Server],完成并退出。value == 1
[CLR Enabled on Server] 完成并退出。
[MessageBox- Server is Configured] 永远无法到达。
任何人都可以帮助我理解这一点,和/或向我指出有关 SSIS 条件控制流的良好资源吗?
您的先例约束默认为一种
AND
情况。前面的任务必须返回成功并且表达式必须为真。在像这样的二进制场景中,这两个任务中只有一个会发生。通过在其中添加下一级约束 - 都与消息框步骤相关联,最后一步是等待“在服务器上启用 CLR”成功以及“在服务器上启用 CLR”成功并等待
value
等于 0。由于只有其中一种情况可以解决,因此您需要将 PC 转为 OR 情况
这导致绿色虚线而不是实线
作为仅供参考,在您的脚本任务中,假设它以自动化方式(SQL 代理)运行,因为您使用的是消息框,所以它将失败。有一个系统级变量,
System::InteractiveMode
它是一个布尔值。它指示您是否在可以与桌面交互的环境中运行。如果评估结果为 false 并且您尝试任何 GUI 活动,则程序包将出错。我发现添加如下代码很有帮助
在那里,我对我的交互模式进行了检查,如果可以的话,我只会尝试显示一些东西。我还继续并触发 OnInformation 事件,因为它会自动记录在 2012+ 项目部署模型中,同时显示在 Visual Studio/SSDT/BIDS 的 GUI 和输出面板中,并且可以通过附加 I 从 DTEXEC.exe 调用轻松记录到报告参数即
/rep EI