从一个数据库到另一个数据库中的表的数据传输

时间:2013-08-21 14:32:02

标签: sql sql-server-2005 ssis

我只是想知道这是否是执行此任务的正确方法。 我们非常感谢任何其他改进建议。

我的SSIS包装上有以下内容。

enter image description here

  1. 数据流任务并建立了与视图所在的源数据库的OLE DB连接。
  2. 执行SQL任务 - 我正在执行一个INSERT INTO目标除外的查询(所有那些已经来自源的记录。)
  3. 发送邮件任务是发送电子邮件。
  4. 如何知道数据传输成功?这样我就可以使用发送邮件了 表示成功或失败。

    如何安排此程序包以便它自动运行(每周二。)

    我已尝试过以下建议。请参阅新的数据流任务。

    enter image description here

    OLE DB Source - 指向数据库服务器1中的视图 Lookup从OLE DB源获取所有行。 (源和查找上的rowcount) 匹配。

    在查找任务上,我已将错误输出配置为在所有映射列上使用“重定向行”。

    在OLE DB目标(目标表中,它已经有来自源的记录子集。所以Configured Error输出获取插入的不匹配行。

    当我执行包时 - 我收到主键约束错误 - 无法插入重复键。

    有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您需要双击Execute SQL TaskSend Mail Task当前它的绿色连接器,这表示它只会在成功时采用该路径。您需要将约束更新为完成,因为您不关心它是成功还是失败。

听起来您的数据流从源中提取所有数据并写入临时表。在“执行SQL任务”中,然后使用查询将数据添加到目标表中,并且不存在。

这可以合并为单个数据流。在OLE DB源和OLE DB目标之间,添加查找任务。从2005年开始,Lookup的行为与2008年不同。您将编写一个查询来回退目标表中的业务键,然后将其与来自OLE DB源的内容进行比较。在界面中映射这些键。

您只想要不匹配的行,这样您就需要获得"不匹配的记录"从查找。在2005年,不匹配输出的选项不存在,因此您需要将错误输出路由到OLE DB目标。

安迪·伦纳德(Andy Leonard)对如何做到这一点有一个很好的小写:Configuration an SSIS 2005 Lookup Transformation for a Left Outer Join唯一不同的是,你不关心匹配的行。您需要选择Ignore Failure,而不是Redirect Row。然后,当您将查找连接到OLE DB目标时,您将看到两个选项。绿色连接器是匹配的,红色连接器是不匹配的行。将红色路径绑定到目的地