问题描述
在我的 SSIS 包 (Visual Studio 2017) 中,我创建了一个平面文件连接
文本限定符:“
标题行分隔符:{LF}
要跳过的标题行:0
所有列的Column Delimiter:逗号{,},除了最后一列WCASH的Column Delimiter = {LF}
运行包时,我在平面文件源中收到错误“未找到列“WCASH”的列分隔符。” “跳过数据行时出错。”
我尝试了许多在线建议(将 WCASH 列增加到 3000 个字符左右,删除平面文件连接并重新创建它),但仍然无法修复错误。
你知道我如何修复这个错误吗?
谢谢
解决方法
您的电子表格中有一些有趣的功能。第一行中的列名在其中包含尾随空格。第 2+ 行中的列值在双引号(第 3 列)后有空格,第四列和最后两列有前导空格。这听起来像是从大型机生成并强制转换为 CSV 的文件。
如果是我,我不会将其识别为列分隔文件(基于 2 行数据)。这是一种参差不齐的正确文件格式,有人在其中添加了文本分隔符和列分隔符。
- 使用 LF 作为标题行分隔符
- 要跳过的标题行 = 1
- 取消选中第一行的列名
在“列”选项卡中,设置包含引号和逗号的列。
在“高级”选项卡中,每隔一列以忽略命名,下一列将是实际数据。
在我的数据流中,我拉入了忽略列以显示它们确实包含垃圾,但在您的包中,您不会想要这样做。
还剩下什么?
清理。
您不能将数字转换为数字数据类型,因为这些前导空格会导致问题(如果我没记错的话)。另外,字符串数据也可能有尾随空格,所以我会有一个派生列,将 TRIM 应用于所有列。
从那时起,尝试将其转换为强类型值并将其放入您的数据库中。
这是我的示例输入文件(以 unix/linefeed/LF 结尾保存)
"NAME ","OPEDT ","OBJ","PCT","MGR ","rr ","WCASH "
"AAAA","07/12/92","BELL",3.23,"AUJ",12364.00
"BBBB","01/05/91","PELL",0.78,"ACC",9879.00