我有一个非常简单的文本文件,其中包含两个逗号分隔值,大约100行.此文件由自动进程(我无法控制)创建,我通过SSIS将此文件导入SQL.
我的工作非常好,除非文件中有空行.通过这个,我的意思是它完全是空白的 - 没有逗号或其他字符.如果在文件中存在,则直接在其后面的记录将在导入的值之前导入两个空格.
例如,如果文本行包含此"ABC,123",则导入的SQL值将为第一列的"ABC".我试图通过使用带有TRIM语句的派生列来删除它,但这没有任何效果.REPLACE功能也不起作用.真正奇怪的是,如果我在数据流Destination之前直接添加数据查看器,则该值看起来很好.我甚至添加了星号,以便我可以"看到"空格,如果它们存在,像这样:
"*" + REPLACE([Column 0]," ","") + "*"
Run Code Online (Sandbox Code Playgroud)
这是一个非常烦人的问题,我非常感谢任何建议.谢谢!
小智 9
这是一种方法.您可以Script Component在数据流任务中使用转换来清理数据.




Name.
CleansedData数据类型的新列string.这个新列将保持没有空格的干净输出.

Input0_ProcessInputRow如下所示.此代码用空白文本替换回车符+换行符,然后修剪文本周围的任何空格.脚本代码:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Row.CleansedData = Row.Name.Replace(@"\r\n", string.Empty).Trim();
}
Run Code Online (Sandbox Code Playgroud)

现在,在OLE DB目标中,使用CleansedData列映射部分中的新列替换旧列.
进行上述更改后,将对包含空格的同一文件执行包.这次在第二行之前没有插入空格.
希望有所帮助.
