使用ssis为平面文件目标创建标头

时间:2015-04-13 00:25:10

标签: ssis

我每小时都会安排一个ssis包,每次都会生成一个平面文件(文本文件)。

有没有办法为每个生成的平面文件生成标题?

我正在考虑使用' UNION'合并两个平面文件(标题和正文),但是我无法控制哪个文件会先出现。

有什么想法吗?

6 个答案:

答案 0 :(得分:5)

单击Connection Manager中的连接,并将“ColumnNamesInFirstDataRow”设置为True。

答案 1 :(得分:2)

这个可能更简单,具体取决于您的偏好:

  1. 使用标题创建文本文件
  2. 在执行流程任务中运行:COPY HeaderFile.TXT + InputFile.TXT OUTPUT.TXT将文件粘贴在一起
  3. 如果在文件末尾有箭头字符,请改用:

    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)

您还可以使用数据流属性。

转到控制流程页面 选择数据流组件的属性平移 转到表达式并选择[平面文件目的地]。[标题] 您可以在此处动态设置此属性的值