基于先前SQL Task输出的SSIS中的条件执行

时间:2019-04-17 08:30:25

标签: sql-server tsql ssis expression

我当前正在开发一个过程,以查看表是否已更新,然后将其添加到我当前正在运行的脱机数据库中。 CDC或任何其他形式的复制都是不可能的,因为我不是sys admin。我有一些要根据之前的SQL任务等的输出运行的SSIS容器。我试图在表达式生成器中构建它们,并将任务输出到变量中。正在填充变量,但类型与表达式生成器之一不同。我收到以下错误:

  

无法将表达式值转换为属性类型。   附加信息:无法将“ System.String”转换为“ System.Boolean”

我曾尝试在表达式生成器和SQL任务中进行转换,但均未成功。

我敢肯定,这很容易解决,但是我还没有找到任何可以解决此问题的在线方法。

任何帮助将不胜感激。

我已在SQL任务中将变量转换为不同类型,但没有用,我也在表达式构建器中将其转换为变量,但给出了关于强制转换参数无效的完全不同的错误。

这是检查表是否存在的查询

SELECT
    Case when count(*) > 0 then 1
        Else 0 end as cnt
FROM sys.databases WHERE [name] = 'Financial Information'

如果存在,则将1分配给CNT 0。结果集设置为“单行”。

在表达式生成器中,我使用:

@[User::cnt] = 1

但这会引发错误:

  

无法将表达式值转换为属性类型。   附加信息:无法将“ System.String”转换为“ System.Boolean”

1 个答案:

答案 0 :(得分:0)

我认为这是在执行SQL任务之后的优先约束中完成的?要进行比较以返回true或false,必须使用两个=。从收到的错误消息中,它看起来像@[User::cnt]是一个字符串变量。下面的示例还使用字符串数据类型的变量进行了比较,但是鉴于您发布的查询,我建议将其更改为int数据类型。如果将@[User::cnt]更改为具有int数据类型,则需要从表达式中删除双引号。

enter image description here