2017-05-12 3 views
2

Ich habe eine string der ursprünglichen Quelle und in Zieltabelle dezimal Es war (5,2), ich versuche, es zu ändern, mit der RegelConvert String Int SSIS

enter image description here

Aber wenn ich Task ausführen Es scheitert immer, kann mir jemand helfen, was ist da falsch?

aktualisieren

Ich versuche auch (DT_DECIMAL,2)TRIM(NAME1) aber es immer noch nicht

Antwort

2

Die Aufgabe Ausfall von einigen Werten verursacht werden können, die nicht konvertiert werden können (enthält nicht-numerischen Wert)

in der Komponentendatenkonvertierung Sie die Fehlerausgabe in Ignore failure dann kann DT_I8 nicht konvertiert, wenn NAME1 einstellen die neue Spalte Wert wird NULL

enter image description here

mehr erfahren Sie in diesem nützlichen Blog-Artikel lesen:

Eine andere Lösung

Sie erreichen dies eine Skriptkomponente ein script Component statt Derived Column

Fügen Sie einfach mit, eine Ausgabespalte vom Typ DT_I8 hinzufügen (vorausgesetzt, es ist Name ist OutColumn) und markieren NAME1 Spalte als Eingabe.

Innerhalb des Skript-Fenster das folgende Skript (mit Vb.Net) schreiben:

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

Große Antwort. Vielen Dank! – Gerardo

1

Versuchen Sie, eine Kombination von DECIMAL und FLOAT Anwendung. Ich habe es getestet und es hat funktioniert.

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

Dies wird zuerst in einen Float und dann in eine Dezimalzahl konvertiert.

+0

Aber wenn Sie die Zeichenfolge in eine ganze Zahl konvertieren müssen (wie im Titel Ihrer Frage definiert ist), dann gelten (DT_I4) TRIM (NAME1). Dies funktionierte auch für mich, aber es ließ die Dezimalstellen fallen (String-Wert von 8.11 wurde nur 8). – user3662215