3

我的 SQL 脚本存储在@gempar=NULL@beneficiary=中'2018-01-01'。需要根据这些变量的内容执行下一个执行 SQL 任务。IFISNULL(@gempar) = True那么我们不运行以下任务(因为 then@gempar 等于 NULL)。另一方面, IFISNULL(@beneficiary) = False然后我们运行以下任务(因为@beneficiary 不是 NULL)。

在此处输入图像描述

下图是执行 SQL 任务的结果集

在此处输入图像描述

我在 SSIS 中创建了 2 个变量 beneficiary 和 gempar ,但我不确定它们是否应该在表达式列中写成如下:@[User::gempar]或者@[User::beneficiary]它们现在在下一个图像中:

在此处输入图像描述

这是 SSIS 控制流程:

在此处输入图像描述

Precedence Constraint Editor的输出应该是 True。为什么它没有抓住价值@beneficiary

在此处输入图像描述

我希望TRUNCATE GEMPAR TABLES任务停止并且TRUNCATE BENE TABLES任务继续。

4

1 回答 1

2

SSIS 不允许 SSIS 变量为空。它有点旧并且在稍微不同的上下文中,但本文进一步详细说明了关于 null 的 SSIS 变量。由于您使用的变量是字符串数据类型,因此选项会将变量与空白字符串进行比较。请记住,这并不能保证这些变量由于执行 SQL 任务中执行的操作而为空。您可能需要为此替换SELECT语句中的空白字符串或其他值。例如,COALESCE(@beneficiary , '')

右键单击任务之间的优先约束选择编辑。然后将求值操作更改为表达式并添加一个表达式,如下所示。根据您的预期结果,评估操作可能需要更改为Expression 和 Constraint,并在 Value 字段中设置先前任务的状态。下面的示例在变量为 null 时返回 true @[User::beneficiary],这将允许按照您的描述执行以下任务。您可以将其反转,即使用!=, 作为@[User::gempar]变量。

@[User::beneficiary]) == ""
于 2019-01-30T16:08:56.463 回答