我每小时都会安排一个ssis包,每次都会生成一个平面文件(文本文件)。
有没有办法为每个生成的平面文件生成标题?
我正在考虑使用' UNION'合并两个平面文件(标题和正文),但是我无法控制哪个文件会先出现。
有什么想法吗?
答案 0 :(得分:5)
单击Connection Manager中的连接,并将“ColumnNamesInFirstDataRow”设置为True。
答案 1 :(得分:2)
这个可能更简单,具体取决于您的偏好:
COPY HeaderFile.TXT + InputFile.TXT OUTPUT.TXT
将文件粘贴在一起如果在文件末尾有箭头字符,请改用:
COPY /B HeaderFile.TXT + InputFile.TXT OUTPUT.TXT
(见an arrow → character getting appeded to files in a .bat script)
答案 2 :(得分:0)
绝对。使用脚本组件是我发现它的最简单方法。我曾经玩过使用平面文件目的地将我想要的数据写入文本文件,然后使用脚本任务添加页眉和页脚。如果你愿意,你可以这样做。
我发现只需一步就可以做到这一点,即将数据流路由到一个脚本任务,该脚本任务在PreExecute中写入标头,在ProcessInputRow中写入所有数据行,并在PostExecute中选择一个页脚。
像这样;
TextWriter tw;
public override void PreExecute()
{
base.PreExecute();
tw = new StreamWriter(Variables.requestFname);
tw.WriteLine("HEADER");
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
tw.WriteLine(Row.WhateverFieldsYouNeed);
}
public override void PostExecute()
{
base.PostExecute();
tw.WriteLine("FOOTER");
tw.Close();
}
答案 3 :(得分:0)
在我的SSIS中,实际上有一个名为Header的Custom Properties下的属性。为我工作很棒。
*刚刚发现您还可以使用具有[Flat File Destination]属性的表达式。[Header]并将其设置为数据流任务中的变量。
答案 4 :(得分:0)
我通过创建两个单独的数据流任务来完成此任务。第一个获取和总计数据,并添加另外的字段以生成第一个标题记录。第二个任务是在行中添加它们的独立元数据。 Trick位于第一个平面文件目标中,它覆盖前一个文件,而在第二个目标中使用相同的文件,但取消选中覆盖数据。如果文件名是动态的,您可以将文件名设置为全局变量,并在start和时间戳文件名上初始化它,然后使用该变量作为目标文件名。
答案 5 :(得分:0)
您还可以使用数据流属性。
转到控制流程页面 选择数据流组件的属性平移 转到表达式并选择[平面文件目的地]。[标题] 您可以在此处动态设置此属性的值