我有三个表,可以使用公共列,键连接,它们具有不同的列数。
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包以实现我的目标?
答案 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中。