首页 > 解决方案 > SSIS 中的优先约束未按预期工作

问题描述

SSIS 中的优先约束未按预期工作。我不确定我错过了什么?

预期结果:如果表达式不为真,则不应执行下一个任务,但在这种情况下,包会执行下一个组件(加载日期)并失败,因为在 DFT 中传递了 NULL 值。如果表达式不评估 True,我想停止执行。

在此处输入图像描述

插入消息表达式"-- ISNULL(@[User::vEndActivityDateTime]) || @[User::vEndActivityDateTime] =="0000-00-00 00:00:00.0000000

"获取最后日期约束表达式" -- !ISNULL(@[User::vEndActivityDateTime] ) || @[用户::vEndActivityDateTime] != "0000-00-00 00:00:00.0000000"

在此处输入图像描述

标签: sql-serverssis

解决方案


SSIS 变量不支持 null 因此该ISNULL函数在这里不起作用。看起来您想使用默认值 0000-00-00 00:00:00.0000,但这不是 SSIS 日期时间变量数据类型的有效值。我建议选择另一个永远不会出现在您的数据中的值作为默认值。在下面的示例中,使用了 1900-01-01。您可以将其设置为 1900-01-01 00:00:00.0000,但它会恢复,因为无论哪种方式,默认值都是相同的。可以在变量窗格的值列中设置变量的默认值(您不需要使用它旁边的表达式列),然后设置优先约束以使用如下表达式检查此默认值。

多变的: 在此处输入图像描述

优先约束表达式:

@[User::vEndActivityDateTime] != (DT_DBTIMESTAMP)"1900-01-01 00:00:00.0000"

推荐阅读