首页 文章

更新SSIS OLEDB目标中的行

提问于
浏览
21

我有一个数据流程,我有一个OLEDB源和一个OLEDB目的地,如下所示:

Data Flow Task

Source合并来自两个临时表的数据并返回结果集(例如,50K行) . 这些50K行也存在于目标表中,但它们是旧数据 .

SELECT * FROM staging1
UNION
SELECT * FROM staging2

通常,在OLEDB目标中,我们将返回的数据集从源表插入目标表,但在我的情况下,我必须使用这些新的50K行更新旧的50K行 .

一种批量更新 .

谁能告诉我怎么做到这一点?我感谢您的帮助 .

3 回答

  • 14

    使用Lookupstage决定是否插入或更新 . 查看此链接了解更多信息 - http://beingoyen.blogspot.com/2010/03/ssis-how-to-update-instead-of-insert.html

    更新步骤:

    • 拖动OLEDB命令[而不是oledb目的地]

    • 转到属性窗口

    • 在自定义属性下,选择SQLCOMMAND并插入更新命令ex:

    UPDATE table1 SET col1 = ?, col2 =?其中id =?

    __999_按照更新命令从源到输出的确切顺序映射列

  • 29

    您无法在具有OOB组件的数据流任务中对SSIS进行批量更新 .

    一般模式是标识插入,更新和删除,并将更新和删除推送到临时表,并在数据流任务之后,在执行SQL任务中使用基于集的更新或删除 . 看看安迪伦纳德的Stairway to Integration Services series . 在文章中向下滚动3/4到"Set-Based Updates"以查看模式 .

    阶段数据

    http://www.sqlservercentral.com/Images/11369.png

    设置基于更新

    enter image description here

    使用这样的模式可以获得更好的性能,而不是使用 OLE DB Command 转换来处理除了大量数据之外的任何事情 .

    如果你是第三方工具,我相信CozyRoc和我知道PragmaticWorks有一个合并目标组件 .

  • 2

    好吧,找到了我的问题的解决方案;使用SQL查询和SSIS中的SQL任务更新所有行,如下所示 . 如果他们将来面临同样的挑战,可以帮助别人 .

    update Original 
    set Original.Vaal= t.vaal 
    from Original join (select * from staging1  union   select * from staging2) t 
    on Original.id=t.id
    

相关问题