我不知道是否可以这样做,但基本上,我有以下数据流:
现在“第4步”是我遇到的情况,我只想在我的数据库中插入具有相应匹配的值,例如,XML有大约6000条记录,从这些记录中,我可能有10个我需要匹配并插入它们而不是插入所有6000个并在事后进行比较(我也可以做,但希望有另一种方法)。我想我可能能够在OLE DB DESTINATION对象中执行一个sql insert命令,其中文件中的ID值匹配,但这是我不是100%明确的,或者它是否甚至可能。我应该简单地进入临时表路径并在事后擦除数据,还是可以直接在目标件中执行此操作?任何建议都将不胜感激。
修改
感谢billinkc的最后评论,我设法得到了一点点,我可以识别匹配并使用该结果集,但不知何故,它似乎运行数据流两次,这很奇怪....我把查找对象拿出来看它是否是它造成的,不管怎样它似乎就是这种情况,为什么它会在添加查找的情况下运行整个流程两次?我应该总共有8个匹配项,我用数据查看器输出确认了这个匹配项,但是它似乎再次为同一个文件运行它。
答案 0 :(得分:2)
是否有理由不能使用查找转换来查找现有记录。配置它以便它将不匹配的记录路由到无匹配输出,然后只将匹配找到的连接器连接到“Navigator Staging Manager Funds”
我相信你会回答你的问题,但我想知道你是否表达了正确的愿望?我的假设是查找将违反现有目标,因此查找返回行的id 10。 SSIS中的所有现成目标只执行插入,因此找到匹配的行现在会加倍。在查找现有行时,通常意味着您要对现有行执行更新。如果是这种情况,那么有一个特别设计的转换,即OLE DB命令。它是允许更新的组件。该组件存在性能问题,每行发出一个更新语句。对于10行,我认为它没问题。否则,您使用的模式是将所有新行(插入)写入目标表,然后将所有已更改的行(更新)写入第二个登台类型表。数据流完成后,使用执行SQL任务执行基于集合的更新语句。
有第三方选项可以处理组合的upsert。我知道Pragmatic Works有一个选项,tasks and components网站上可能还有其他选项。