【问题标题】:SSIS - How to check if the value in a column matches (is the same) another columnSSIS - 如何检查列中的值是否与另一列匹配(相同)
【发布时间】:2018-11-26 12:05:27
【问题描述】:

我正在做一个验证过程,尝试使用条件拆分来查看当前经理是否 = 销售人员数据库中的前任经理(查看下面的图片链接)。如果它们不匹配,我稍后会用它来表示转变。

我尝试过 [manager_2017] == [manager_2018] 但它没有运行。我究竟做错了什么?它不应该运行,因为它是一个 True 或 False 案例?

我在 Visual Studio 2017 中使用 SSIS。

【问题讨论】:

  • 您能否单击“编辑”按钮并展开“它无法运行”
  • 我发现了错误,样本有空值,SSIS 需要一些关于如何处理它们的规范

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


【解决方案1】:

在等待澄清确切错误时,提供的语法是正确的。 [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) 上进行比较。

【讨论】:

    【解决方案2】:

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

    所以公式最终为: [manager_2017] == [manager_2018] && !ISNULL([manager_2017]) && !ISNULL([manager_2018])

    显然我使用的样本要大得多,我有多个层次级别要比较,我为了询问而对其进行了简化,所以我最终忽略了空值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      相关资源
      最近更新 更多