我对SSIS有些陌生。我坚持住了。我想要组合多个CSV文件,然后将它们放入数据库中。所有的文件都有相同的信息。示例:
档案1
Week Text1
22-10-2018 58
29-10-2018 12档案2
Week Text2
22-10-2018 55
29-10-2018 48档案3
Week Text3
22-10-2018 14
29-10-2018 99预期结果: DB的结果
Week Text1 Text2 Text3
22-10-2018 58 55 14
29-10-2018 12 48 99通过选择文档、使用排序和连接合并,我取得了很大的成绩。对于3份文件,我花了3种和2种加入合并。我必须这样做大约86个文档。一定有更简单的办法。
提前谢谢。
发布于 2018-10-23 06:39:27
我同意KeithL的意见,我建议您的最后一张表如下所示:
Week Outcome Value DateModified
=======================================================
22-10-2018 AI 58 2018-10-23 20:49
29-10-2018 AI 32 2018-10-23 20:49
22-10-2018 Agile 51 2018-10-23 20:49
29-10-2018 Agile 22 2018-10-23 20:49如果您想要将周或结果转向,请在报告工具中这样做。
不要创建带有动态命名列的表--这是个坏主意
无论如何,这里有一种使用暂存表的方法。
创建一个暂存表,您的文件将插入其中:
脚本1:
CREATE TABLE Staging (
[Week] VARCHAR(50),
Value VARCHAR(50),
DateModified DATETIME2(0) DEFAULT(GETDATE())
)导入整个文件,包括标题。换句话说,在定义文件格式时,不要勾选“第一行中的列”
我们这样做有两个原因:
导入文件后,暂存表如下所示:
Week Value DateModified
=======================================
Week Agile 2018-10-23 20:49
22-10-2018 58 2018-10-23 20:49
29-10-2018 32 2018-10-23 20:49现在,选择要加载它的形状的数据。导入数据以检查数据后,在数据库中运行此命令:
脚本2:
SELECT Week, Value,
(SELECT TOP 1 Value FROM Staging WHERE Week = 'Week') Outcome
FROM staging
WHERE Week <> 'Week'现在添加一个INSERT和一些逻辑来停止重复。将其放入数据导入后的执行SQL任务中。
脚本3:
WITH SRC As (
SELECT Week, Value,
(SELECT TOP 1 Value FROM Staging WHERE Week = 'Week') Outcome
FROM staging As SRC
WHERE Week <> 'Week'
)
INSERT INTO FinalTable (Week,Value, Outcome)
select Week, Value, Outcome
FROM SRC
WHERE NOT EXISTS (
SELECT * FROM FinalTable TGT
WHERE TGT.Week = SRC.Week
AND TGT.Outcome = SRC.Outcome
)现在,您可以将其封装在一个for每个文件循环中,该循环会对文件夹中的每个文件重复此操作。不要忘记,在导入每个文件之前,您需要进行TRUNCATE TABLE staging。
摘要:
TRUNCATE TABLE Staging的SQL;
我已经将DateModified列放在表中,以帮助您排除故障。
发布于 2018-10-22 13:58:33
您可以使用简单的C#脚本组件(Source)读取您的文件。
您需要将3列添加到output0中。
加载到表后,始终可以创建具有动态枢轴的视图。
https://stackoverflow.com/questions/52926761
复制相似问题