4

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

我该如何在数据流对象中执行此操作,或者将记录从对象中传输出来,以便我可以使用执行 SQL 任务来执行此操作?

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

4

1 回答 1

2

SSIS 不支持表值参数。您要实现的目标有几种解决方法:

  • 有几个第 3 方 UPSERT/MERGE 目的地,包括 CodePlex 上的这个http://ssisctc.codeplex.com/wikipage?title=MERGE%20Destination
  • 您可以使用 OLEDB 目标将行插入服务器上的临时表,然后从执行 SQL 任务针对临时表运行存储过程。(这是我们在我目前的项目中所做的)
  • 您可以编写自定义 .NET 脚本目标
  • 您可以使用查找转换来查看它们是否存在于表中,然后插入不存在的行并对其他行运行 OLEDB 命令,这至少比对每一行运行它要好
于 2012-10-20T11:45:56.910 回答