【问题标题】:SSIS: How to store master-details records by condition?SSIS:如何按条件存储主从记录?
【发布时间】:2016-09-12 13:02:21
【问题描述】:

我是 SSIS 的新手,我完全被一些简单的问题所困扰。 我有两个具有一对多关系的表。我在 Script 组件中解析 HTML 数据,并为 Master Data 和 Detail 记录创建两个输出。

然后我检查覆盖现有数据的条件,如果满足,我将主记录写入表中。不幸的是,我的数据流看起来像上图(示意图)。在任何情况下都会添加详细记录。我希望仅在满足条件时才存储详细信息(图片上的绿色箭头),但无法想象该怎么做。

【问题讨论】:

  • 写主数据的条件是什么,如何确定?根据是否可以在脚本任务之前移动此条件或在脚本任务中设置此条件,您可以只使用表达式约束优先级。要在脚本中执行此操作,请添加一个包变量,您可以在脚本中设置它的值,然后在约束中测试它的值。
  • 嗨@Matt!这里的条件只是为了说明问题。真实的结构更复杂。但是感谢您的提示!

标签: ssis conditional one-to-many master-detail dataflow


【解决方案1】:

当我们必须将 XML 数据加载到父子表中时,我也遇到了同样的问题。为此,我在 package.json 中添加了两个数据流任务。在第一个 DFT 中,我只解析了 XML 并将数据加载到主表中。在第二个 DFT 中,我解析了子 XML 节点数据并将此输出传递给合并连接运算符(第一个输入)。现在,我们必须将第二个输入传递给合并连接运算符,我已经从主表中提取数据。

【讨论】:

  • 我明白了。我不喜欢的是 XML 会被解析两次。在我的情况下,源是一个远程网页。但我会考虑如何克服它。可以将数据流之间的 html 节点作为对象变量传输。
【解决方案2】:

伙计们! 最终我设法解决了这个问题。我将整个过程分成两个数据流。在第一个中,我解析 html,如果需要,将主数据保存在表中,并将解析的详细数据保存在包 Object 变量中。此外,第一个数据流有一个 Row Count 组件,它将其值保存在 MasterRowCount 变量中。在第二个数据流中,我将详细数据保存在表中。第一个和第二个数据流通过表达式约束优先级 (@MasterRowCount > 0) 连接。因此,第二个数据流只有在添加了主数据时才会执行。

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 2021-12-21
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多