kry*_*tah 8 sql-server ssis ssdt
我的 SSIS 包的控制流未按预期运行。
我想要实现的目标:
测试是否在 SQL Server 上启用了 CLR 使用
SELECT value
FROM sys.configurations
WHERE name = 'clr enabled'
Run Code Online (Sandbox Code Playgroud)
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- 服务器已配置] 永远不会到达。
任何人都可以帮助我理解这一点,和/或向我指出有关 SSIS 条件控制流的好资源吗?
bil*_*nkc 11
您的先例约束默认为一种AND情况。前面的任务必须返回成功并且表达式必须为真。
在这样的二进制场景中,这两个任务中只有一个会发生。通过添加约束下一级的-都依赖于消息框步,最后一步就是等待“启用CLR上服务器”是成功的,以及“CLR服务器上启用”是成功的,并为value要等于0。
由于只有其中一种情况会奏效,因此您需要将 PC 摆到 OR 状态
这导致绿色虚线而不是实线
作为仅供参考,在您的脚本任务中,假设它以自动方式(SQL 代理)运行,因为您使用的是消息框,它会失败。有一个系统级变量,System::InteractiveMode它是一个布尔值。它指示您是否在可以与桌面交互的环境中运行。如果评估结果为 false 并且您尝试任何 GUI 活动,则程序包将出错。
我发现添加如下代码很有帮助
public void Main()
{
// TODO: Add your code here
bool interactiveMode = (bool) this.Dts.Variables["System::InteractiveMode"].Value;
bool fireAgain = false;
string message = "This is some message I likely built out using other SSIS Variable values";
if (interactiveMode)
{
MessageBox.Show(message);
}
this.Dts.Events.FireInformation(0, "CLR Check", message, string.Empty, 0, ref fireAgain);
Dts.TaskResult = (int)ScriptResults.Success;
}
Run Code Online (Sandbox Code Playgroud)
在那里,我检查了我的交互模式,并且只在可能的情况下尝试显示某些内容。我还继续触发 OnInformation 事件,因为它会自动登录到 2012+ 项目部署模型中,显示在 Visual Studio/SSDT/BIDS 的 GUI 和输出面板中,并且可以通过将 I 附加到 DTEXEC.exe 调用中轻松记录报告参数即 /rep EI
| 归档时间: |
|
| 查看次数: |
6698 次 |
| 最近记录: |