代码之家  ›  专栏  ›  技术社区  ›  Mario

将两个带有ssis的表组合成一个目标表

  •  0
  • Mario  · 技术社区  · 16 年前

    我是新来的,所以请跟我来。

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

    最好的方法是什么?

    我可以很容易地看到使用tsql的简单内部连接查询的结果,但是使用ssis包却没有任何运气。我目前的方法是三个步骤:

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

    此过程在第一步失败,而不是在查找步骤失败,并出现错误“行在查找过程中未生成匹配项”。外键不能为空,而且显然主键也不能为空。我在步骤到中使用了一个SQL语句,这样我就可以确保在列中没有任何空日期值(有一些),但我仍然得到错误。如果我将第一步失败路径输出到平面文件目标,我会得到一个空的csv(在调试模式下观看会显示大约600k条记录进入平面文件)。

    在这一点上,我很困惑,这似乎是一项非常容易的任务。我在网上搜索答案,发现了这个 link 这听起来和我遇到的问题完全一样,但是更改缓存设置没有帮助。

    感谢您的帮助!

    1 回复  |  直到 16 年前
        1
  •  3
  •   Christian Loris    16 年前

    听起来您的查找不匹配。我将手动运行查询并验证两个OLEDB源是否都没有空的外键;以及每个外键是否与查找表中的某个项匹配。

    这里有一个更简单的方法。使用您在ole db源中提到的内部联接查询。不要使用表select,请为SQL查询提供联接。这让SQL服务器完成连接的所有繁重工作,然后SSIS可以完成传输。

    推荐文章