2012-10-19 36 views
3

我正在尝试编写一个SSIS包以将数据从一个数据库传输到另一个数据库(直接复制,我正在传输和传出的表具有相同的结构体)。我选择了记录的一个子集(自上次运行包以来创建或修改的记录),我试图将它们转储到目标数据库上的一个存储过程,这将确定哪些记录需要更新以及哪些记录需要插入。我如何通过一个表作为SSIS DataFlow中的存储过程参数

我该怎么做我要么在数据流对象内部执行此操作,要么将记录传出对象,以便使用执行SQL任务执行操作?

我不想使用OLE DB命令,因为它一次只能处理一条记录。这两个数据库位于不同位置的不同机器上,并且我希望此包尽可能少地运行,因为我正在编写它来替换运行时间过长的DTS包(它将删除整个目的地表的内容并重新复制所有内容,更改或以其他方式)

+0

您是否考虑过使用SQL复制从源更新远程数据库?如果你的源表具有(或可以很容易地更新)主键并且相当可靠,那么应该更容易设置。 – JohnLBevan

回答

2

SSIS不支持表值参数。有几种变通为你正在尝试实现:

  • 有几个第三方UPSERT /合并目的地,其中包括这一个在CodePlex上http://ssisctc.codeplex.com/wikipage?title=MERGE%20Destination
  • 你可以使用一个OLEDB目的地插入行到一个临时表,然后从执行SQL任务中针对临时表运行存储过程。 (这是我们一直在我当前的项目完成)
  • 你可以写一个自定义的.NET脚本目标
  • 你可以使用一个查找转换,看看他们是否存在于表中,然后插入不排存在和运行OLEDB命令对其他人至少会比对每一行运行它更好
+0

使用查找转换,但将更改的行路由到登台表并在数据流后执行SQL任务中的更新。这种模式可以让你避免OLEDB Command的RBAR痛苦。 – billinkc

相关问题