我对所有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
预期结果: 结果进入数据库
Week Text1 Text2 Text3
22-10-2018 58 55 14
29-10-2018 12 48 99
我通过选择文档,使用排序然后进行合并合并达到了这一目标。对于3个文档,这花了我3种和2种合并合并。我必须对大约86个文档执行此操作。必须有一种更简单的方法。
谢谢。
答案 0 :(得分:1)
我同意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
)
现在,您将其包装在每个文件循环中,对文件夹中的每个文件重复此操作。不要忘记导入每个文件之前需要TRUNCATE TABLE staging
。
摘要:
TRUNCATE TABLE Staging
的SQL任务; 我将DateModified列放在表中,以帮助您进行故障排除。
答案 1 :(得分:0)
您可以使用简单的C#脚本组件(源)读取文件。
您需要将3列添加到output0。
值为DT_I4
string[] lines = System.IO.File.ReadAllLines([filename]);
int ctr = 0;
string type;
foreach(string line in lines)
{
string[] col = line.Split(',');
if(ctr==0) //First line is header
{
type = col[1];
}
else
{
Output0Buffer.AddRow();
Output0Buffer.Week = DateTime.Parse(col[0]);
Output0Buffer.Type = type;
Output0Buffer.Value = int.Parse(col[1]);
}
ctr++;
}
加载到表格后,您始终可以使用动态数据透视表创建视图。