2017-05-12 49 views
2

我原來源的string進入目標表這是十進制(5,2),我嘗試用規則字符串轉換爲INT SSIS

enter image description here

改變它但是當我運行任務它總是失敗,有人可以幫助我什麼是錯的嗎?

更新

我也嘗試(DT_DECIMAL,2)TRIM(NAME1)但它仍然無法

回答

2

任務失敗可能被一些值不能被轉換引起的(包含非數字值)

在數據轉換部件可以將錯誤輸出設置爲Ignore failure然後如果NAME1不能轉換爲DT_I8新列值將是NULL

enter image description here

你可以閱讀更多這個有用的博客文章:

另一個解決方法

爲此,可以使用的script Component代替Derived Column

只需添加一個腳本組件實現,加DT_I8類型的輸出列(假設它是名稱爲OutColumn)並將NAME1列標記爲輸入。

裏面的腳本編寫窗口(使用Vb.Net)以下腳本:

Public Class ScriptMain 
    Inherits UserComponent 

    Public Overrides Sub InputBuffer0_ProcessInputRow(ByVal Row As InputBuffer0) 


     Dim intValue as Int64 

     If Not Row.NAME1_ISNULL AndAlso 
      Not String.iSnullOrEmpty(Row.NAME1.Trim) AndAlso 
      Int64.TryParse(Row.NAME1.Trim, intValue) Then 

      Row.OutColumn = intValue 

     Else 

      Row.OutColumn_IsNull = True 

     End If 

    End Sub 

End Class 
+1

很棒的回答。謝謝! – Gerardo

1

嘗試將DECIMAL和FLOAT的組合。我試過這個測試,它工作。

(DT_DECIMAL,2)(DT_R4)TRIM(NAME1) 

這首先轉換爲浮點數,然後轉換爲小數點。

+0

但是如果你需要將字符串轉換爲一個整數(如在你的問題的標題定義),然後應用( DT_I4)TRIM(NAME1)。這也適用於我,但它確實降低了小數(8.11的字符串值僅爲8)。 – user3662215