【问题标题】:Combining two tables with SSIS into one destination table使用 SSIS 将两个表合并到一个目标表中
【发布时间】:2010-05-11 18:57:06
【问题描述】:

我是 SSIS 的新手,所以请多多包涵。

我为 SQL Server 2008 创建了一个集成服务项目,以将数据从旧数据库导入新数据库。我需要做的一件事是将两个旧源表中的数据导入到一个新的目标表中。

最好的方法是什么?

我可以通过使用 tsql 的简单内部联接查询轻松查看我想要的结果,但使用 SSIS 包没有任何运气。我目前的方法是一个三步过程:

  1. 添加从我的第一个源表中提取所有列的 OLE DB 源组件
  2. 添加一个查找组件,这是我的 OLE DB 源组件之后的下一步。在此,我查询第二个源表“使用 sql 查询的结果”,它不返回空值,然后将外键 id 从“可用输入列”拖到可用查找列中的主键。我还选中了“可用输入列”中的复选框,以添加另外 2 个列。
  3. 添加 OLE DB 目标,指向我的目标表。

此过程在第一步失败,而不是在查找步骤失败,并失败并出现错误“Row yielded no match during lookup”。外键不能为空,显然主键也不能。我一步一步使用了 SQL 语句,所以我可以确保我没有在列中得到任何空日期值(有一些),但我仍然收到错误。如果我将第一步失败路径输出到平面文件目标,我会得到一个空的 CSV(在调试模式下观看表明大约 60 万条记录进入平面文件)。

在这一点上我很困惑,这似乎应该是超级简单的任务。我在网上搜索了答案,发现这个link 听起来与我遇到的完全相同的问题,但更改缓存设置没有帮助。

帮助表示赞赏!

【问题讨论】:

    标签: sql-server-2008 ssis etl


    【解决方案1】:

    听起来您的查找不匹配。我会手动运行查询并验证两个 OLE DB SOURce 都没有空外键;并且每个外键都匹配查找表中的某些内容。

    这里有一个更简单的方法。使用您在 OLE DB 源中提到的内部联接查询。不要使用表选择,为您的 SQL 查询提供连接。这让 SQL Server 完成所有繁重的连接工作,然后 SSIS 可以进行传输。

    【讨论】:

    • 我同意你的观点,这听起来好像我不匹配 - 我在网上阅读的所有帮助似乎都指向这一点,但是两个表(包含外键的表,以及主表)是 int 数据类型,不允许空值。我确实喜欢另一种方法的想法,所以我尝试了。我不知道您可以在源代码中执行 SQL 命令,但它就在数据访问模式下 :) 非常感谢您的帮助,效果很好!
    • 如果您想了解更多有关出了什么问题的信息,我有一个建议。在查找任务中,您可以将失败的行配置为转到单独的输出。在查找任务中,选择配置错误输出。选择您希望发生的错误。您可以将其重定向到另一个输出,甚至可以忽略它。如果您重定向,请将其转储到文本文件中并查看发生了什么。或者忽略它并在目标表中查找缺少查找数据的行。祝你好运!
    猜你喜欢
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2017-09-28
    • 2015-10-29
    • 2011-06-03
    相关资源
    最近更新 更多