如何使用约束编辑器中的查询结果集有条件地执行SQ​​L Task?

时间:2019-01-30 15:47:55

标签: sql sql-server visual-studio ssis expressionbuilder

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

enter image description here

下一个图像是执行SQL任务中的结果集

enter image description here

我在SSIS中创建了2个变量受益人和gempar,但是我不确定它们是否应该在表达式列中按以下方式编写:@[User::gempar]@[User::beneficiary]或现在在下一张图像中:

enter image description here

这是SSIS控制流:

enter image description here

优先约束编辑器的输出应为True。为什么它没有捕获@beneficiary中的值?

enter image description here

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

1 个答案:

答案 0 :(得分:2)

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

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

@[User::beneficiary]) == ""