J'essaie de find un moyen d'parsingr 1 champ dans 8 champs différents en utilisant SSIS. Je suis ouvert à une solution C # ou à une solution VB. J'ai trouvé un moyen de le faire dans SQL Server, mais comme mon équipe fait beaucoup de choses dans SSIS maintenant, j'aimerais avoir une solution SSIS pour que les choses restnt simples et efficaces. J'ai regardé en ligne et trouvé une option, dans le lien ci-dessous.
Fractionner une seule colonne de données avec des délimiteurs de virgules en plusieurs colonnes dans SSIS
Je ne suis pas vraiment sûr de la façon dont cela fonctionne, si cela fonctionne même. Mon exemple de données ressemble à ceci: Purchase | 345 | USD | GT | TF456577 | DG | 125 | KTMDC
Purchase | 345 | USD | GT | TF456577 | DG | 125 | KTMDC
Je peux avoir de 0 à 7 caractères pipe, donc je dois split un champ en un maximum de huit champs. J'apprécierais toute aide avec ceci. Merci.
Hadi, je fais quelques petites modifications. Pouvez-vous regarder la capture d'écran et dites-moi ce qui ne va pas ici? De plus, je n'ai jamais trouvé l'option DT-STR
. Peut-être que c'est le problème.
Vous pouvez le faire en utilisant un composant de script
Dans cette réponse, je vais supposer que la source de données est une table SQL Server, avec une colonne Column0
Dans le package du service d'intégration, procédez comme suit:
Data Flow Task
Data Flow Task
ajoutez une OLEDB Source
et choisissez la table contenant la colonne à split. Script Component
(Définir son type sur Transformation) OLEDB Source
au composant de script Script Component
select Column0
comme input Output0
(ex: outColumn0, outColumn1 ... outColumn8
) avec le type de données DT-STR
Dans la window Script, écrivez le script suivant:
Imports System.Linq Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) If Not Row.Column0_IsNull AndAlso Not Ssortingng.IsNullOrEmpty(Row.Column0.Trim) Then Dim strColumn As Ssortingng = Row.Column0 Dim intVerticalBarCount As Integer intVerticalBarCount = strColumn.Count(Function(x) x = CChar("|")) If intVerticalBarCount <= 8 Then strColumn = strColumn & "".PadRight((8 - intVerticalBarCount), CChar("|")) Dim strOutputColumns As Ssortingng() = strColumn.Split(CChar("|")) Row.outColumn0 = strOutputColumns(0) Row.outColumn1 = strOutputColumns(1) Row.outColumn2 = strOutputColumns(2) Row.outColumn3 = strOutputColumns(3) Row.outColumn4 = strOutputColumns(4) Row.outColumn5 = strOutputColumns(5) Row.outColumn6 = strOutputColumns(6) Row.outColumn7 = strOutputColumns(7) Else Row.outColumn0_IsNull = True Row.outColumn1_IsNull = True Row.outColumn2_IsNull = True Row.outColumn3_IsNull = True Row.outColumn4_IsNull = True Row.outColumn5_IsNull = True Row.outColumn6_IsNull = True Row.outColumn7_IsNull = True End If End Sub
Dans le code ci-dessous, nous obtenons d'abord le nombre d'occurrences de barres verticales |
dans la colonne si elle est inférieure à 8, nous ajoutons les barres verticales manquantes, puis nous divisons la colonne et l'assignons aux colonnes de sortie