Ssis 使用SSI为平面文件目标创建标头
我每小时都有一个ssis包,该包每次都生成一个平面文件(文本文件) 是否有方法为生成的每个平面文件生成头 我正在考虑使用“UNION”来合并两个平面文件(头文件和正文文件),但是我无法控制哪个文件会先合并Ssis 使用SSI为平面文件目标创建标头,ssis,Ssis,我每小时都有一个ssis包,该包每次都生成一个平面文件(文本文件) 是否有方法为生成的每个平面文件生成头 我正在考虑使用“UNION”来合并两个平面文件(头文件和正文文件),但是我无法控制哪个文件会先合并 有什么想法吗?当然有。使用脚本组件是我发现的最简单的方法。我曾经尝试过使用平面文件目标将想要的数据写入文本文件,然后使用脚本任务附加页眉和页脚。如果你愿意,你可以那样做 我发现只需在一个步骤中完成就可以了,也就是说,将数据流路由到一个脚本任务中,该任务在PreExecute中写入页眉,在Pro
有什么想法吗?当然有。使用脚本组件是我发现的最简单的方法。我曾经尝试过使用平面文件目标将想要的数据写入文本文件,然后使用脚本任务附加页眉和页脚。如果你愿意,你可以那样做 我发现只需在一个步骤中完成就可以了,也就是说,将数据流路由到一个脚本任务中,该任务在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();
}
这可能更简单,具体取决于您的偏好:
COPY HeaderFile.TXT+InputFile.TXT OUTPUT.TXT
将文件粘在一起COPY/B HeaderFile.TXT+InputFile.TXT OUTPUT.TXT
(请参阅)在我的SSIS中,自定义属性下实际上有一个名为Header的属性。对我来说工作得很好。
*刚刚发现还可以使用带有属性[Flat File Destination].[Header]的表达式,并将其设置为数据流任务上的变量。我通过创建两个单独的数据流任务来实现这一点。第一个将获取和汇总数据,并添加其他字段以生成第一个标题记录。第二个任务在我们创建的行中添加它们的独立元数据。技巧是在第一个平面文件目标中让它覆盖上一个文件,在第二个目标中使用相同的文件,但取消选中覆盖数据。如果文件名是动态的,您可以将文件名设置为全局变量,并在开始时对其进行初始化,然后使用带有时间戳的文件名,然后将该变量用作目标文件名。您还可以使用数据流的属性 转到控制流页面 选择数据流组件的属性 转到表达式并选择[Flat File Destination]。[Header]
在这里,您可以动态设置或不设置此属性的值单击连接管理器中的连接,并将“ColumnNamesInFirstDataRow”设置为True 谢谢,但是标题当然每次都会动态变化。“HEADER”只是您需要的任何动态HEADER的占位符。例如,就像我使用Variables.requestFname来确定文件将写入何处一样,您可以在SSIS中创建另一个字符串变量来表示头。您可以在运行时对表达式求值,并用Variables.HeaderVariable替换代码中的“HEADER”。有意义吗?是的,我稍后会试试。但是,“header”超过255个字符,我不确定它是否可以包装在变量中?SSIS中有一个
Object
类型变量,可以用来处理动态情况,例如从表中选择并将数据转储到Object
类型的变量中。我尝试了这种方法,但它似乎在输出的末尾包含一个箭头符号?这很奇怪。。。原始文件中不存在箭头符号?如果在文本编辑器中检查Ascii码,它是什么字符?您使用哪个文本编辑器查看?根据这一点:您需要使用/B
来复制命令。我将据此编辑answe。唯一的遗憾是该方法无法动态生成输出文件名?我需要在bat文件中指定名称?您可以使用表达式填充执行过程任务的内容。那会让你这么做的。在某些情况下,使用脚本可能更好,但我认为目前为止还不错。仅供参考:此选项仅在查看特定于数据流任务的表达式时出现在选项列表中。如果右键单击平面文件目标对象并查看属性/表达式,但仅当右键单击并打开任务本身的属性时,此选项才可见。这让我在尝试实现这一点之前耽误了一段时间。非常好,这是一个非常简单的解决方案@Chris,您可以添加一个页脚数据流任务…^——这里就是真正的答案!