我的SQL脚本存储在@gempar
= NULL
和@beneficiary
= '2018-01-01'
中。
需要根据这些变量的内容执行下一个执行SQL任务。如果ISNULL(@gempar) = True
,则我们不运行以下任务(因为@gempar
等于NULL )。另一方面,如果ISNULL(@beneficiary) = False
,则我们运行以下任务(因为@beneficiary
不是NULL )。
下一个图像是执行SQL任务中的结果集:
我在SSIS中创建了2个变量受益人和gempar,但是我不确定它们是否应该在表达式列中按以下方式编写:@[User::gempar]
和@[User::beneficiary]
或现在在下一张图像中:
这是SSIS控制流:
优先约束编辑器的输出应为True。为什么它没有捕获@beneficiary
中的值?
我希望 TRUNCATE GEMPAR TABLES 任务停止,并且 TRUNCATE BENE TABLES 任务继续。
答案 0 :(得分:2)
SSIS不允许SSIS变量为null。它有些旧,并且上下文略有不同,但是此article进一步详细说明了SSIS变量关于null的问题。由于您使用的变量属于字符串数据类型,因此可以使用一个选项将变量与空白字符串进行比较。请记住,由于执行SQL任务中执行的操作,不不能保证这些变量为空。您可能需要在SELECT
语句中替换空白字符串或其他值。例如,COALESCE(@beneficiary , '')
。
在任务之间的“优先约束”上单击鼠标右键,然后选择“编辑”。然后将评估运算更改为表达式并添加一个表达式,如下所示。根据您的预期结果,可能需要将“评估操作”更改为表达和约束,并在“值”字段中设置先前任务的状态。当@[User::beneficiary]
变量为null时,下面的示例返回true,这将允许按照您所描述的那样执行以下任务。您可以将其反转,即对!=
变量使用@[User::gempar]
。
@[User::beneficiary]) == ""