2017-05-12 5 views
2

J'ai une string de source originale et dans la table de destination Il était décimal (5,2), je tente de le changer avec une règleConvertir chaîne à Int SSIS

enter image description here

Mais quand je lance la tâche Il échoue toujours, quelqu'un peut-il m'aider ce qui ne va pas?

Mise à jour

J'essaie aussi (DT_DECIMAL,2)TRIM(NAME1) mais échoueront encore

Répondre

2

L'échec de la tâche peut être causée par certaines valeurs qui ne peuvent pas être converties (contient une valeur non numérique)

Dans le composant de conversion de données, vous pouvez régler la sortie d'erreur à Ignore failure alors si NAME1 ne peut pas converti en DT_I8 la nouvelle valeur de la colonne sera NULL

enter image description here

Vous pouvez en savoir plus dans cet article de blog utile:

Une autre solution

Vous pouvez y parvenir en utilisant un script Component au lieu de Derived Column

Il suffit d'ajouter un composant de script, ajoutez une colonne de sortie de type DT_I8 (en supposant qu'il est le nom est OutColumn) et marquer la colonne NAME1 comme entrée.

Dans la fenêtre de script écrire le script suivant (en utilisant 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

Bonne réponse. Merci! – Gerardo

1

Essayez d'appliquer une combinaison de DECIMAL et FLOAT. J'ai essayé un test de ceci et cela a fonctionné.

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

Ceci convertit d'abord en un flottant puis en un nombre décimal.

+0

Mais si vous avez besoin de convertir la chaîne en un entier (tel que défini dans le titre de votre question), puis appliquez (DT_I4) TRIM (NOM1). Cela a également fonctionné pour moi, mais il a fait tomber les décimales (la valeur de chaîne de 8,11 est devenue juste 8). – user3662215