2

我不知道这是否可以完成,但基本上,我有以下数据流: SSIS 导入

  1. 从 XML 文件中提取数据(工作正常)
  2. 只需根据封闭条件拆分记录(工作正常)
  3. 由于某些字符集问题,不得不添加派生列对象(可能是更好的方法,但它有效)

现在“第 4 步”是我遇到的一个场景,我只想在我的数据库中插入具有相应匹配项的值,例如,XML 有大约 6000 条记录,从这些记录中,我可能有我需要匹配其中的 10 个并插入它们,而不是插入所有 6000 个并在事后进行比较(我也可以这样做,但希望有另一种方法)。我在想我可能能够在文件中的 ID 值匹配的 OLE DB DESTINATION 对象中执行 sql insert 命令,但这就是我不是 100% 清楚的,或者是否有可能。我应该简单地走临时表路线并在事后清理数据,还是可以直接在目标块中执行此操作?任何建议将不胜感激。

编辑

感谢 billinkc 的最后一条评论,我设法离得更近了一点,在那里我可以识别匹配项并使用该结果集,但不知何故,它似​​乎运行了两次数据流,这很奇怪....我进行了查找反对以查看它是否是导致它的原因,并且似乎是这种情况,为什么它会在添加查找的情况下运行整个流程两次?我应该总共有 8 个匹配项,我通过数据查看器输出确认了这一点,但是它似乎为同一个文件第二次运行它。

在此处输入图像描述

4

1 回答 1

3

您是否有理由不能使用查找转换来查找现有记录。对其进行配置,以便将不匹配记录路由到不匹配输出,然后仅将找到的匹配连接器连接到“Navigator Staging Manager Funds”

我相信这回答了你的问题,但我想知道你是否表达了正确的愿望?我的假设是查找将与现有目标相反,因此查找返回 id 10 为一行。SSIS 中所有开箱即用的目标都只执行插入,因此找到匹配的行现在将加倍。当您正在寻找现有行时,这通常意味着您想要执行更新到现有行。如果是这种情况,则有一个专门设计的转换,即 OLE DB 命令。它是允许更新的组件。该组件存在性能问题,它对流经它的每行发出一个更新语句。对于10行,我认为没问题。否则,您将使用的模式是将所有新行(插入)写入目标表,然后将所有更改的行(更新)写入第二个暂存类型表。数据流完成后,使用 Execute SQL Task 执行基于集合的更新语句。

有处理组合 upserts 的第三方选项。我知道Pragmatic Works有一个选项,并且任务和组件站点上可能还有其他选项。

于 2012-06-15T14:31:00.070 回答