2017-02-10 62 views
0

我對SSIS及其數據類型比較陌生。我已經成功創建了一個數據流任務,該任務將數據從逗號分隔的.txt平面文件導入到SQL Server。運行任務時,在點的.txt文件的日期字段0SSIS包 - 派生列條件表達式爲零的日期字段

image description

對於派生列表達式的日期字段轉換爲0至空時出現的錯誤,我來了使用以下迄今...

[Latest Bill Due Date]==0 ? NULL(DT_DATE) : (DT_DATE)[Latest Bill Due Date] 

...但邏輯不被接受,並顯示錯誤消息:

的數據類型「DT_WSTR」和「DT_I4」是不相容爲b inary運算符「==」。操作數類型不能隱式轉換爲操作的兼容類型。爲了執行這個操作,一個或兩個操作數需要用一個轉換操作符顯式轉換。

預先感謝您的任何方向。

+1

它會出現「最新比爾到期日期」是unicode(DT_WSTR)。在0附近加上引號,即[最新賬單到期日] ==「0」? NULL(DT_DATE):(DT_DATE)[最新帳單到期日期] –

+0

謝謝。編寫這個問題讓我還記得我的Java編程類,比較兩邊的數據類型必須是相同的類型。源字段被識別爲字符串。最終的代碼工作(包括在源數據中處理YYYYMMDD格式所需的SUBSTRING): LTRIM([Latest Bill Due Date])==「0」? NULL(DT_DATE):(DT_DATE)(SUBSTRING([Latest Bill Due Date],1,4)+「 - 」+ SUBSTRING([Latest Bill Due Date],5,2)+「 - 」+ SUBSTRING([Latest Bill到期日],7,2)) –

回答

0

我有一個類似的問題,當在文本文件中有一個00000000值,不得不在日期時間列中將其轉換爲空值。最終爲我工作的是在列中建立null值爲default的表,並且還將腳本組件添加爲轉換。添加爲列輸出類似「VerifyNullDateVar」和腳本里面做這樣的事情

if (Row.DATEVAR == 0) 
    { 
     //do whatever you want to do if the input value is an actual date 

     Row.VerifyNullDateVar = 2; 
    } 
    else 
     Row.VerifyNullDateVar = 1; 

DATEVAR被輸入列從文本文件獲取。在此之後,使用派生列從讀取值VerifyNullDateVar

  1. VerifyNullDating == 1
  2. VerifyNullDating == 2

最後,你需要設置2 OLEDB目標,一個時,你可以保存日期表中的值;另一個當你在它保存任何東西,這樣它得到默認值null