繁体   English   中英

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

[英]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 == ""

我跟着这个教程。

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

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

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

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

  • 已更改_ORDER_TYPE [Copy of ORDER_TYPE] != ORDER_TYPE
  • Changed_WEEK [Copy of WEEK] != WEEK

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

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

根据您的“忽略错误”评论,我假设您有一个带有 NULL 比较的条件,该条件可能未包含在引用的链接中。

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

那奏效了。 数据查看器显示我的输入列之一正在转换为浮点数,而表数据类型为 int,因此带小数的值与表中的值不同,因为它们被转换为 int。 固定的。

未来的读者,请验证您的数据类型(双击组件外的连接线并选择 MetaData)是否一致,因为数据转换规则可能会以意想不到的方式让您感到惊讶。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM