Utilisation de SSIS pour lire des fichiers plats avec plusieurs types d'enregistrement

StackOverflow https://stackoverflow.com/questions/1422565

  •  07-07-2019
  •  | 
  •  

Question

Nous évaluons actuellement SSIS pour déterminer s’il serait approprié de lancer un nouveau projet. L'un des processus devra traiter un fichier plat avec des enregistrements délimités. Le fichier contiendra des commandes. Il existe une ligne d'en-tête, une ligne d'adresse de livraison (en option) et une ou plusieurs lignes de détail. Les champs de chaque ligne sont délimités mais n'ont pas le même format.

J'ai lu cette réponse:

données transactionnelles SSIS (différents types d'enregistrement, un fichier)

Et je peux scinder les données à l'aide de la tâche Fractionnement conditionnel pour produire plusieurs sorties, mais je ne sais pas comment procéder à partir de là. J'ai deux problèmes à résoudre:

  1. L'en-tête de commande doit être inséré en premier, avant l'adresse et les détails, car l'adresse et les détails feront référence à l'enregistrement de la commande. Je pense donc que je dois d'abord traiter cette sortie, mais je ne suis pas sûr de savoir dans SSIS comment pour que cette branche de la tâche de fractionnement conditionnel soit traitée avant les autres branches. Idéalement, j'aimerais traiter l'en-tête de la commande, puis stocker l'identifiant de la commande dans une variable utilisateur afin que, lors du traitement des détails, je puisse référencer cette variable.

  2. Il y aura plusieurs ordres dans le fichier, le fractionnement est donc plus complexe.

Je pourrais toujours écrire une application en C # permettant de prétraiter le fichier ou de le lire dans une table de transfert, mais je ne suis pas sûre d'aimer cette approche.

Quelqu'un qui a déjà suivi ce processus peut-il donner un aperçu de la manière dont il l'a géré?

Merci,

Chris

Était-ce utile?

La solution

Après la scission, déposez chaque type d’enregistrement dans sa propre table de transfert, ou dans une destination de données brutes ssis, qui est plus rapide et convient aux étapes intermédiaires comme celle-ci. Chargez ensuite tous les en-têtes dans leur table finale et procédez sans erreur de référence.

Je suppose que les enregistrements de détail contiennent un ID d'en-tête? Cela devrait vous faciliter la tâche. Si non, faites-le nous savoir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top