我原來源的string
進入目標表這是十進制(5,2),我嘗試用規則字符串轉換爲INT SSIS
改變它但是當我運行任務它總是失敗,有人可以幫助我什麼是錯的嗎?
更新
我也嘗試(DT_DECIMAL,2)TRIM(NAME1)
但它仍然無法
我原來源的string
進入目標表這是十進制(5,2),我嘗試用規則字符串轉換爲INT SSIS
改變它但是當我運行任務它總是失敗,有人可以幫助我什麼是錯的嗎?
更新
我也嘗試(DT_DECIMAL,2)TRIM(NAME1)
但它仍然無法
任務失敗可能被一些值不能被轉換引起的(包含非數字值)
在數據轉換部件可以將錯誤輸出設置爲Ignore failure
然後如果NAME1
不能轉換爲DT_I8
新列值將是NULL
你可以閱讀更多這個有用的博客文章:
另一個解決方法
爲此,可以使用的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
嘗試將DECIMAL和FLOAT的組合。我試過這個測試,它工作。
(DT_DECIMAL,2)(DT_R4)TRIM(NAME1)
這首先轉換爲浮點數,然後轉換爲小數點。
但是如果你需要將字符串轉換爲一個整數(如在你的問題的標題定義),然後應用( DT_I4)TRIM(NAME1)。這也適用於我,但它確實降低了小數(8.11的字符串值僅爲8)。 – user3662215
很棒的回答。謝謝! – Gerardo