2016-04-14 120 views
1

我正在將平面文件源中的記錄導入到具有不接受NULL值的4列的SQL表中。我想要做的是將包含特定4字段的空值或空值的記錄重定向到平面文件目標。重定向NULL或平面文件中的空白值

下面你可以看到表的配置:

Table Structure

這裏是從我的平面文件源的樣品,我已經在第一條記錄削除的county_code中,UCN在第二個記錄,和第三個action_id。

enter image description here

如果我因限制運行我的包,因爲它是當前配置,它的錯誤了:

The column status returned was: "The value violated the integrity constraints for the column.". 

所以我的問題是,如何我重定向這些行?我想我應該做一個有條件的分割,但我不確定,而且我也不知道如何配置。到目前爲止,我的嘗試是徒勞的。

有什麼建議嗎?

回答

1

在平面文件源之後添加派生列轉換。在那裏你會測試不可爲空的列是否爲空。

爲了便於調試,我將爲每個有問題的列添加一個標誌。

(ISNULL(timestamp) || LEN(RTRIM(timestamp)) == 0) ? true : false null_timestamp

像這樣的表達式將確定從平面文件中的列是否爲空,或者是否修整長度是零。

一旦你測試了旗幟,你就會添加一個條件分割。條件拆分路由行基於布爾表達式。我會到壞的數據輸出添加到它因爲他們是布爾值,如果我們還是值加在一起是否有這些都是爲真,則整個表達式爲真,行是使用像

null_timestamp || null_country_code || null_etc 

表達路由到錯誤的數據路徑。

+0

感謝@billinkc - 該解決方案的一個小修正LEN函數鑄datetime列文本後很好地工作。 – MISNole

0

您可以先將數據加載到臨時表,然後對臨時表使用2個單獨的查詢,或者插入到表中,或寫出到平面文件?

1

我只想補充一個條件分割,並相應地命名輸出:

enter image description here

+0

我喜歡這種方法 - 但是如何表達datetime和int的條件?我似乎無法讓這個表達式評估爲真。 – MISNole

+0

應該可以通過簡單的類型轉換(例如以下(帶有所提及的類型的派生列)):LEN(REPLACENULL((DT_WSTR,100)[Derived Column 1],「」))== 0 – Tyron78

+0

謝謝!那就是訣竅。 – MISNole

相關問題