2017-02-26 58 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」,「」)運行完成,但原始問題仍然存在 –