sql-server - SSIS 中的 INSERT/UPDATE 条件拆分工作不正确
问题描述
在发布之前,我为我的特定问题寻找答案。什么也没找到。我在 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
的,因为我们将为我们应该采取的行动生成布尔条件。
添加一列IsInsert
并IsUpdate
使用上述表达式。现在将您的派生列连接到条件拆分并替换两个表达式以仅使用我们的新派生列。在拆分之前添加一个数据查看器,您可以验证您的逻辑是否合理。
鉴于您的 UPDATE 表达式的长度,在DER Action Flags
我上面描述之前,我会将其分解为派生列中的各个列评估。称它为DER Compute Changed Flags
表示我们正在计算列是否已更改。
在这个派生列组件中,您将分解每个列更改检查,即
- 已更改_ORDER_TYPE
[Copy of ORDER_TYPE] != ORDER_TYPE
- 已更改_WEEK
[Copy of WEEK] != WEEK
IsUpdate
然后将逻辑简化为Changed_ORDER_TYPE || Changed_WEEK...
现在,数据查看器将向您显示导致更改被错误标记的确切情况。这将问题归结为这两个输入,并且该表达式未按预期进行评估(这是我们可以弄清楚的)
根据您的“忽略错误”评论,我假设您有一个带有 NULL 比较的条件,引用的链接可能未涵盖该条件。
由于这是一系列转换为答案的评论,
那行得通。数据查看器显示我的输入列之一转换为浮点数,而表数据类型为 int,因此带小数的值与表中的值不同,因为它们被转换为 int。固定的。
未来的读者,请验证您的数据类型(双击组件中的连接线并选择 MetaData)是否一致,因为数据转换规则可能会以意想不到的方式让您感到惊讶。
推荐阅读
- r - 负正则表达式在 R 中不起作用
- .htaccess - 这是 RewriteRule 冗余吗?
- css - 滚动条覆盖在 Mac 上,但与 Windows 上的内容内联
- javascript - Javascript:用两个数组消除数组元素
- javascript - 尝试在 ReactJS 中按 ID 设置元素样式时出错
- reactjs - 如何在 React Native Router Flux 中传递 Redux 存储
- scala - Scala:如何在未来管理致命错误(如 OOM)
- algorithm - 如何在没有箭头的图上进行深度优先搜索?
- vue.js - Nuxt.js 自定义存储文件夹
- c# - 通过 WMI (C#) 检索当前登录用户的用户名