SSIS-如何检查一列中的值是否匹配(相同)另一列

时间:2018-11-26 12:05:27

标签: visual-studio ssis visual-studio-2017

我正在执行一个验证过程,试图使用条件拆分来查看当前人员是否是销售员数据库中的过去管理员(请参见下面的图像链接)。如果它们不匹配,我稍后会用它来表示变化。

我尝试执行[manager_2017] == [manager_2018],但无法运行。我究竟做错了什么?它是True还是False情况下不应该运行吗?

我正在将SSIS与Visual Studio 2017一起使用。

https://i.stack.imgur.com/rUXEk.png

2 个答案:

答案 0 :(得分:0)

在等待澄清确切错误时,提供的语法正确。 [manager_2017] == [manager_2018]是有效的SSIS表达式,其结果为布尔类型(DT_BOOL)。

我发现在条件拆分之类的东西之前添加派生列并创建显式列来保存我的逻辑标志很方便。这样可以更轻松地将数据查看器/数据分录添加到组合中,以确保涵盖了所有案例。

IsSameManager  `[manager_2017] == [manager_2018]`

然后在我的条件拆分中,我将有两个输出流。默认值和一个新的“保留的经理”,然后我可以将其拆分为一列IsSameManager

根据您的样本数据,有两件事我可能会想到会导致错误。首先是列名称在SSIS中区分大小写。电子表格的第一列“ Salesperson_id”为大写字母,经理列为小写字母。如果将它们表示为Manager_2017,则表达式必须更改为[Manager_2017]

另一种可能性是数据键入。如果这些列之一被解释为大数据类型(DT_NTEXT / DT_TEXT),则不允许在非大类型(DT_WSTR,DT_STR)之间进行比较。

答案 1 :(得分:0)

我发现了错误,但感谢您的提示。 基本上,该样本具有空值,因此我必须指定在SSIS运行之前如何处理这些值。

因此,公式的最终结果为: [manager_2017] == [manager_2018] &&!ISNULL([manager_2017])&&!ISNULL([manager_2018])

很明显,我使用的样本要大得多,我需要比较多个层次结构级别,并且出于询问的目的简化了它,所以最终忽略了空值。