如何使用约束编辑器中查询的结果集有条件地执行SQL任务?

如何使用约束编辑器中查询的结果集有条件地执行SQL任务?,sql,sql-server,visual-studio,ssis,expressionbuilder,Sql,Sql Server,Visual Studio,Ssis,Expressionbuilder,我的SQL脚本存储在@gempar=NULL和@受益人='2018-01-01'中。 需要根据这些变量的内容执行下一个执行SQL任务。如果ISNULL(@gempar)=True,则我们不运行以下任务(因为@gempar等于NULL)。另一方面,如果ISNULL(@受益人)=False,那么我们运行以下任务(因为@受益人不是NULL) 下一个图像是执行SQL任务的结果集: 我在SSIS中创建了两个变量受益人和gempar,但我不确定它们是否应该在表达式列中按以下方式写入:@[User::ge

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

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


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

这是SSIS控制流:

优先级约束编辑器的输出应为True。为什么它没有捕捉到
@受益人
中的值


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

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

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

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

你的问题是什么?我不知道你想问什么。如果
gempar
为真,而
受益人
为假,该怎么办?我想根据两个变量(@gempar和@受益人)中的值有条件地执行TRUNCATE gempar TABLES或/和TRUNCATE BENE TABLES。只在变量不为NULL时才需要执行流。“我不确定它们是否应该在表达式列中按如下方式写入:@[User::gempar]和@[User::受益人],或者它们现在在下一张图片上的样子:“为什么不尝试两种方法,看看哪种方法有效?我做到了,但两种方法都给了我相同的结果。这就是两条管道都在运行的原因。我只需要正确的一个来执行,因为@受益人不为null。您的表达式语法错误。它应该是:
LEN(@[User::受益人])>1