SSIS Flat File Destination如何输出\x00\x00\x0d\x0a行终止符?
在SSIS中实现固定长度平面文件自定义行终止符(\x00\x00\x0d\x0a)的方案
可以实现,先说明你之前SQL加end_tag字段没生效的原因:SSIS的Flat File Destination会自动套用连接管理器里设置的行终止符,导致你手动加的终止符和默认的重复或被覆盖,下面给你两种适合新手的操作方法:
方法一:直接修改平面文件连接管理器的行终止符(最简便)
- 打开你的SSIS包,找到Flat File Connection Manager(导出文件用的连接),右键选择【编辑】。
- 在编辑器【常规】选项卡,找到行分隔符,默认是
{CR}{LF},先切换为【自定义】。 - 由于直接输入不可见的NUL字符(\x00)不方便,用表达式配置:
- 关闭编辑器,右键连接管理器选【属性】。
- 在属性面板找到Expressions,点击右侧省略号按钮。
- 在表达式编辑器中,选择RowDelimiter属性,输入表达式:
"\x00\x00\r\n" - 点击【确定】保存设置。
- 回到Flat File Destination的设置,确保列按固定长度配置(无需列分隔符,列之间靠预设长度区分),正常导出即可。
方法二:用脚本组件手动拼接行和终止符(更灵活)
如果方法一遇到编码或格式兼容问题,用脚本组件可完全控制输出内容:
- 在数据流任务中,在数据源(如OLE DB Source)和Flat File Destination之间,拖入一个脚本组件,选择【转换】类型。
- 双击脚本组件,在【输入列】选项卡,勾选所有需要导出的列。
- 切换到【输入和输出】选项卡:
- 展开【Output 0】,点击【添加列】,命名为
FullRow,数据类型选DT_STR(ASCII编码)或DT_WSTR(Unicode),长度设为所有固定列长度之和 + 4(\x00\x00\r\n共4个字节)。
- 展开【Output 0】,点击【添加列】,命名为
- 切换到【脚本】选项卡,点击【编辑脚本】,在代码编辑器中替换
Input0_ProcessInputRow方法内容(以C#为例):
public override void Input0_ProcessInputRow(Input0Buffer Row) { // 按固定长度拼接所有列,PadRight的数字对应列的预设固定长度,不够补空格(可按需改补位字符) string rowContent = Row.Column1.PadRight(10) + // 替换Column1为你的列名,10为该列固定长度 Row.Column2.PadRight(20) + // 同理替换 Row.Column3.PadRight(15); // 按需添加所有列 // 添加自定义终止符 rowContent += "\x00\x00\r\n"; // 赋值给输出列 Row.FullRow = rowContent; }
- 关闭脚本编辑器,回到数据流,将Flat File Destination的输入列改成
FullRow,并在连接管理器里把行分隔符设为【无】,避免重复添加终止符。
验证方法
导出后用十六进制编辑器打开文件,确认每行结尾是00 00 0D 0A(对应\x00\x00\x0d\x0a)即可。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

