INSERT/UPDATE SSIS 中的条件拆分工作不正确

INSERT/UPDATE conditional split in SSIS working incorrectly

我在发帖前寻找我的具体问题的答案。没找到任何东西。我在 SSIS 中有一个条件拆分,它正在插入和更新,除了它似乎每次运行时都会更新 250 多行,无论是否对源进行了更新。插入工作正常。但它仅在我在条件拆分上“忽略错误”时才有效,否则拆分“评估为 NULL,但“条件拆分”需要布尔结果”错误出现。关于如何解决这个问题的任何想法?我的条件拆分如下所示:

UPDATE = [Copy of ORDER_TYPE] != ORDER_TYPE || [Copy of WEEK] != WEEK || [Copy of GOAL] != GOAL || [Copy of WEEK_START] != WEEK_START || [Copy of WEEK_END] != WEEK_END || [Copy of DIVISION_DESC] != DIVISION_DESC || [Copy of SUB_ORDER_TYPE] != SUB_ORDER_TYPE
INSERT = ISNULL(ID) || ISNULL(WEEK) || ORDER_TYPE == ""

我遵循了 this 教程。

在这种情况下,我们无法调试正在发生的事情,因为我们无法访问您的数据、您的包和上述布尔条件的结果。 当遇到这样的问题时,我所做的是在条件拆分之前添加一个(可能是两个)派生列任务。第一个我称之为 DER Action Flags,因为我们将为我们应该采取的行动生成布尔条件。

添加一列 IsInsertIsUpdate 并使用上面的表达式。现在将您的派生列连接到条件拆分并替换这两个表达式以仅使用我们的新派生列。在拆分之前添加一个数据查看器,您可以验证您的逻辑是否合理。

鉴于您的 UPDATE 表达式的长度,我会在 DER Action Flags 我上面描述的之前将其分解为派生列中的各个列评估。将其命名为 DER Compute Changed Flags 表示我们正在计算列是否已更改。

在此派生列组件中,您将分解每个列更改检查,即

  • Changed_ORDER_TYPE [Copy of ORDER_TYPE] != ORDER_TYPE
  • Changed_WEEK [Copy of WEEK] != WEEK

然后将 IsUpdate 逻辑简化为 Changed_ORDER_TYPE || Changed_WEEK...

现在,数据查看器将向您显示导致变更被错误标记的确切条件。这将问题归结为这两个输入,并且这个表达式没有按预期进行评估(这是我们可以弄清楚的)

根据你的“忽略错误”评论,我假设你有一个条件与 NULL 比较可能不被引用 link.

并且由于这是转换为答案的一系列评论,

That worked. The data viewer showed that one of my input columns was converting as float, while the table datatype was int, so the values with decimals are different than those in the table, as they get converted as int. fixed.

未来的读者,请验证您的数据类型(双击组件和 select 元数据的连接线)是否一致,因为数据转换规则可能会以意想不到的方式给您带来惊喜。