SSIS需求:在每行间插入固定值99作为尾记录生成固定宽度文件
在SSIS中为每行数据插入固定值99的尾记录
嘿,针对你在SSIS里生成固定宽度文件的需求——要在每条解析好的数据行后面插入一行固定值为99的尾记录,我给你分享两种实用的实现方法,亲测好用:
方法1:用脚本组件(最灵活,适合每行插记录)
这是最直接的方式,能精准控制每一行的输出:
- 先把你的数据源(比如从数据库来的OLE DB源)拖到数据流里,然后连接一个脚本组件(记得选「转换」类型)。
- 打开脚本编辑器,在「输入列」里勾选所有需要输出的列(就是你提到的Col1到Col5这些)。
- 切换到「输入和输出」选项卡,确认默认输出是启用的。如果需要区分行类型,还可以给输出加个
RecordType列(字符串类型,长度按需设置)。 - 点击「编辑脚本」,用C#写两行核心逻辑:先输出原始数据行,再输出99的尾记录行。这里要注意贴合你的固定宽度要求,比如列的长度、空格填充:
public override void Input0_ProcessInputRow(Input0Buffer Row) { // 先输出原始数据行 Output0Buffer.AddRow(); Output0Buffer.Col1 = Row.Col1; Output0Buffer.Col2 = Row.Col2; Output0Buffer.Col3 = Row.Col3; Output0Buffer.Col4 = Row.Col4; Output0Buffer.Col5 = Row.Col5; // 再输出99尾记录行,按固定宽度填充 Output0Buffer.AddRow(); Output0Buffer.Col1 = "99"; // 这列放99 Output0Buffer.Col2 = new string(' ', 3); // 假设Col2宽度3,用空格填充 Output0Buffer.Col3 = new string(' ', 10); // Col3宽度10,空格填充 Output0Buffer.Col4 = new string(' ', 7); // Col4宽度7,空格填充 Output0Buffer.Col5 = new string(' ', 8); // Col5宽度8,空格填充 } - 保存脚本后,把脚本组件的输出连到平面文件目标,配置好固定宽度格式就搞定了。
方法2:Union All + 派生列(适合文件末尾加单条尾记录,备选)
如果你的需求是整个文件最后加一条99尾记录(不是每行之后),可以用这个更简单的方式:
- 给原始数据流加个派生列,新增
RowType列,值设为"Data"。 - 拖一个生成行组件,生成一条空记录,再用派生列设置所有列的固定宽度值(比如Col1设为"99",其他列填对应长度的空格),同时新增
RowType列值为"Trailer"。 - 用Union All把两个数据流合并,最后连到平面文件目标就行。
关键提醒
- 一定要严格对齐固定宽度的要求,每个列的长度、填充的空格数都要和接收系统的格式一致,不然生成的文件会报错。
- 测试的时候先输出到本地文本文件,检查每行后面的99记录是否正确,格式有没有问题。
内容的提问来源于stack exchange,提问作者PeteMiller
相关产品推荐
相关产品推荐

