如何从具有不同结构的多个表中提取到一个平面文件?

时间:2014-04-28 17:56:35

标签: sql-server-2008 join ssis

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

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包以实现我的目标?

1 个答案:

答案 0 :(得分:0)

我真的不明白你是如何加入这三张桌子的。我需要更具体的细节。

基本想法是去

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中。

enter image description here