使用SSIS跳过TXT文件中不同格式的多表头加载数据
SSIS加载特殊双表头竖线分隔TXT文件的解决方法
方法1:重新配置平面文件连接管理器
由于第二行表头用逗号分隔,与数据的竖线分隔格式冲突,直接设置“跳过2行”会导致SSIS解析列时出错,需按数据格式强制配置:
- 新建平面文件连接,选择目标TXT文件,格式选分隔,点击下一步
- 列分隔符设置为
|(匹配数据的分隔规则),文本限定符留空,跳过行数填2,点击下一步 - 到列名步骤时,忽略错误的列名预览,直接进入预览环节,确认数据行是否正确加载
- 完成配置后,数据流任务中使用该连接即可正常读取数据
方法2:脚本组件作为源读取数据
如果平面文件连接无法正确解析,用脚本组件自定义读取逻辑:
- 在数据流任务中添加脚本组件,选择“源”类型
- 进入“输入和输出”选项卡,添加与目标表匹配的输出列,设置对应数据类型
- 编辑脚本,用C#/VB读取文件并跳过前两行,示例C#代码:
using System.IO; public override void CreateNewOutputRows() { // 提前在包变量中定义TxtFilePath,存储目标TXT文件路径 string[] allLines = File.ReadAllLines(Variables.TxtFilePath); // 跳过前两行表头 for (int lineIndex = 2; lineIndex < allLines.Length; lineIndex++) { string currentLine = allLines[lineIndex].Trim(); if (string.IsNullOrEmpty(currentLine)) continue; string[] columnValues = currentLine.Split('|'); // 给输出列赋值,根据实际列数调整 Output0Buffer.AddRow(); Output0Buffer.Col1 = columnValues[0]; Output0Buffer.Col2 = columnValues[1]; // 依次添加其他列的赋值逻辑 } } - 将脚本组件的输出连接到目标表,运行数据流即可
方法3:预处理文件移除表头
用批处理或脚本提前去掉前两行表头,再加载处理后的文件:
- 批处理脚本示例(保存为
RemoveHeaders.bat,与TXT文件同目录运行):more +2 "原始数据.txt" > "无表头数据.txt" - 在SSIS中直接加载
无表头数据.txt即可
内容的提问来源于stack exchange,提问作者kathija
相关产品推荐
相关产品推荐

