的問題
空行不包含任何列分隔符這意味着它僅包含一列,而從FALT文件中讀取,這將導致問題。
如何解決它
在平面文件連接管理器中刪除列分隔符和讀每一行視爲DT_STR
類型的一列,並設置長度4000
然後添加腳本組件並執行以下操作:
- 檢查該行是空
- 輸出必須包含您需要
列
您可以使用類似的代碼:(我用vb.net)
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.Column0_IsNull AndAlso
Not String.IsNullOrEmpty(Row.Column0) Then
Dim strcolumnms() As String = Row.Column0.Split(CChar(";"))
Dim dtTemp As Date
If DateTime.TryParse(strcolumnms(0), System.Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dtTemp) Then
Row.Column1 = dtTemp
Else
Row.Column1_IsNull = True
End If
If DateTime.TryParse(strcolumnms(1), System.Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dtTemp) Then
Row.Column2 = dtTemp
Else
Row.Column2_IsNull = True
End If
Else
Row.Column1_IsNull = True
Row.Column2_IsNull = True
End If
End Sub
在平面文件
這是更好地存儲在一個平面文件的日期值(或其他數據類型)工作時選擇DT_STR
類型,並將其轉換(檢查後,如果他們也形成了日處理)使用Script Component
或Data Conversion
轉換。
使用腳本組件
首先,你必須添加Script component
,標註日期列作爲輸入,創建類型DT_DBDATE
的一個新的輸出列。如果你想檢查特定日期格式您可以使用DateTime.TryParseExact()方法或使用DateTime.TryParse()來嘗試基於CultureInfo日期格式的分析日期。
我給兩個例子: 假設輸入列名是inDate
,輸出列是outDate
DateTime.TryParseExact()
Dim strFormats() As String = {"yyyy-MM-dd"}
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.inDate_IsNull AndAlso
Not String.IsNullOrEmpty(Row.inDate) Then
Dim dtTemp As DateTime
If DateTime.TryParseExact(Row.inDate, strFormats, System.Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dtTemp) Then
Row.outDate = dtTemp
Else
Row.outDate_IsNull = True
End If
End If
End Sub
日期時間.TryParse()
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.inDate_IsNull AndAlso
Not String.IsNullOrEmpty(Row.inDate) Then
Dim dtTemp As DateTime
If DateTime.TryParse(Row.inDate, System.Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dtTemp) Then
Row.outDate = dtTemp
Else
Row.outDate_IsNull = True
End If
End If
End Sub
你可以在這個崗位使用SSIS的腳本組件閱讀更多關於日期時間的轉換:
使用數據轉換轉換
使用數據轉換組件onent到DT_STR
列轉換爲DT_DBDATE
並在Error Output
設置不能轉換被替換Ignore failure
所以通過數值NULL
日期在平面文件是一個巨大的痛苦的工作。我會推薦作爲文本分段到中間表,然後在插入到真正表中時重新格式化。可能爲你節省麻煩。不顯示問題的原因,但至少你有一個快速的解決方法。 –
它期待兩個字段,但它將空白行讀作一個字段(因爲沒有逗號),所以EndDate甚至沒有NULL,它只是缺少。 – Donnie
@Donnie - 感謝您指出這一點,您說得對,該行沒有必要的分隔符。讓我試試看分隔符。 – VKarthik