2010-12-01 3 views
0

J'ai une table contenant des lignes de données liées que je dois transformer dans un paquet SSIS et je ne suis pas sûr de la façon de procéder.SSIS: Les données transforment les lignes délimitées en champ

Dans ce tableau, les lignes liées les unes aux autres sont séparées par une ligne qui contient un caractère de tuyau, par ex.

ligne de test 1_1
ligne de test
ligne 1_2 test
1_3 |
ligne d'essai 2_1
ligne de test 2_2
ligne de test
2_3 |
ligne de test 3_1
ligne de test 3_2
ligne de test 3_3

etc ..

je besoin de déplacer ce dans une table et concaténer les lignes de chaque groupe de lignes dans une ligne séparée par le tuyau délimiteur. Donc, à partir de l'exemple ci-dessus, je dois retrouver avec une autre table:

ligne d'essai ligne 1_1 test de ligne de test de 1_2 1_3
ligne d'essai ligne 2_1 essai 2_2 ligne de test 2_3
test en ligne 3_1 ligne ligne de test de 3_2 test 3_3

Je ne suis pas sûr de savoir comment le faire. J'ai pensé à exporter dans un fichier texte puis à réimporter en utilisant le délimiteur de pipe - cela fonctionnerait mais je traiterai des millions de lignes et donc je préférerais éviter cette surcharge, il doit y avoir un moyen de le faire dans SSIS mais pour le moment Je ne suis pas sûr de comment.

Toute aide très appréciée, merci.

+0

Est-ce toujours 3 lignes de données séparées par une ligne de conduite? –

Répondre

1

Vous pouvez créer une tâche de flux de données qui utilise un composant source. La source récupèrera les données avec une instruction SQL.

Ensuite, ajoutez un composant de script en tant que transformation. Le composant de script doit être défini comme asynchrone. Sélectionnez l'onglet Entrées et sorties du composant Script, puis sélectionnez Sortie 0. Définissez SynchronousInputID sur Aucun. Cela permettra au composant de sortir un nombre de lignes différent du nombre de lignes entrées. Ajoutez une nouvelle colonne sous la branche Output Columns.

Dans votre composant de script, vous pouvez concaténer les données comme vous le souhaitez. Par défaut, votre tampon d'entrée sera Row et le tampon de sortie sera Output0Buffer. Vous pouvez utiliser Row.NextRow() pour obtenir la ligne d'entrée suivante et Output0Buffer.AddRow() pour ajouter de nouvelles lignes de sortie. Etant donné vos données d'échantillon, vous pouvez ajouter des données d'entrée dans le tampon de sortie jusqu'à ce qu'un '|' apparaît. Ou, vous pouvez utiliser un compteur si cela correspond à vos données.

+0

Merci, c'est exactement ce que je cherchais. –

Questions connexes