2017-02-26 59 views
1

我有一个每天从外部源生成的输入文件,所以我有littel控制它。 该文件将由SSIS读取,然后插入到SQL Server 2012数据库中。我来到一个特定的线路上发布问题。删除从文本文件导入的SSIS中的'NUL'字符

在问题的线路是这样的:

"|"James"|"Done"|""|""|""|"11548"|" "|""|""|""|""|""|""|""|""|""|" 

在7字段中的值实际上不是空间,而是一个“NUL”字符的ASCII(0),我似乎无法 删除它在SSIS中。

我正在使用派生列转换来替换null。整个字符串被命名为“DataColumn”。到目前为止,我已经在表达式构建器中尝试了以下内容。

1) Replace(DataColumn, "CHAR(0)", "") 
2) Replace(DataColumn, "CHAR(0)", "\"\"") 
3) Replace(DataColumn, "ASCII(0), "") 
4) Replace(DataColumn, " ", "") 
5) Replace(DataColumn, "\x000", "") 

此外,下面的建议也已尝试过:

Replace(DataColumn, "0x0", "") 
Replace(DataColumn, "\x0000", "") 

至今没有似乎是为我工作,所以任何建议将不胜感激。

+0

不要引用函数调用。如果你这样做,它正在寻找一个字符串像'CHAR(0)' – mroach

回答

1

当调用REPLACE函数时,请不要引用对CHARASCII函数的调用。例如,如果引用它们,则REPLACE正在查找值为CHAR(0)的文字字符串。

这个例子在这里剔除了NULL字符

declare @str varchar(100) = 'Hello>' + char(0) + '<' 
declare @fixed varchar(100) = replace(@str, char(0), '') 

select @str, len(@str), @fixed, len(@fixed) 

旁注:该ASCII函数返回字符的数字codepint,所以这不是你在这里后,在做什么,因为你知道你要找的零点字符0

+0

刚刚尝试过,但是删除SSIS表达式生成器中的引号,导致“函数”字符“不能被识别。函数名称不正确或不存在。”错误信息。我试过char(0)和CHAR(0)。 感谢您指出的边注btw。要记住的东西。 –

+0

啊,我没有意识到SSIS中不支持CHAR。试试:'REPLACE(DataColumn,0x0,'')'。或者,或者在搜索字符串中使用'\ x0000'(四个零)。 – mroach

+0

Both “\ x0000” \ x0000 抛出错误消息。 替换(DataColumn,“0x0”,“”)运行完成,但原始问题仍然存在 –