【问题标题】:How to extract from multiple tables with different structure to one flat file?如何从具有不同结构的多个表中提取到一个平面文件?
【发布时间】:2014-04-28 17:56:34
【问题描述】:

我有以下三个表,可以使用公共列、键连接它们,它们有不同的列数。

table1 (key, colnA-1, colnA-2, …, colnA-n)
table2 (key, colnB-1, colnB-2, …, colnB-m)
table3 (key, colnC-1, colnC-2, …, colnC-i)

我需要合并三个表并导出到一个平面文件,如下所示

colnA-1, colnA-2, A, colnA-3, …, colnA-n
colnA-1, colnA-2, B, colnB-1, colnB-2, …, colnB-m
colnA-1, colnA-2, B, colnB-1, colnB-2, …, colnB-m
colnA-1, colnA-2, B, colnB-1, colnB-2, …, colnB-m
…
colnA-1, colnA-2, C, colnC-1, colnC-2, …, colnC-i
colnA-1, colnA-2, C, colnC-1, colnC-2, …, colnC-i
colnA-1, colnA-2, C, colnC-1, colnC-2, …, colnC-i
…

A means the data in rest of the line are from table1, B means the data in the rest of the line are from table2, etc.  

我的第一个问题是,是否可以编写一个查询来连接三个表以生成具有上述结构的最终表,然后我可以使用 SSIS 将数据从最终表导出到平面文件?我自己对此的回答可能不是,因为表 A 中的记录与表 B 中的记录具有不同的结构。

另一个问题是,由于我是创建 SSIS 包的新手,我使用 SSIS 的唯一经验是在 SSMS 中进行导入/导出,有人可以分享一些想法如何创建 SSIS 包以实现我的目标吗?

【问题讨论】:

    标签: sql-server-2008 join ssis


    【解决方案1】:

    我真的不明白你是如何加入这三个表的。我需要更准确的细节。

    基本思路是去

    SELECT colnA-1, colnA-2, 'A', …, colnA-n
    FROM table1
    UNION ALL
    SELECT colnB-1, colnB-2, 'B', …, colnB-n
    FROM table2
    UNION ALL
    SELECT colnC-1, colnC-2, 'C', …, colnC-n
    FROM table3
    

    如果您的数据类型不兼容,则需要使用CAST() 语句使它们兼容。

    在构建包并选择数据源时,请选择 OLE DB 源。在配置窗口中,选择一个 SQL 命令,而不是选择一个表。然后将您的工作查询粘贴到 SSIS。

    【讨论】:

    • 我无法将它们转换为相同的类型。这三个表的结构不同,列数不同,列类型也不同。
    • 然后您可能必须将它们提取到不同的文件中,然后使用执行进程任务(使用单个命令或批处理文件调用 cmd.exe)将它们连接到单个文件中。 SSIS 中的文件连接是面向字段的,它会进行合理数量的数据检查,因此尝试将三个文件导出到同一个输出文件时可能会遇到问题。如果您打算使用这些文件稍后通过 SSIS 导入,则必须使用三个单独的文件或规范化它们之间的字段以使用单个文件。
    猜你喜欢
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2019-01-03
    • 1970-01-01
    相关资源
    最近更新 更多