IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SSIS Discussion :

Update table après export dans fichier plat


Sujet :

SSIS

  1. #1
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut Update table après export dans fichier plat
    Bonjour,

    je ne connais pas très bien SSIS et je n'arrive pas à mes fins sur un projet :
    - dans un DataFlow, j'exporte certaines données d'une table vers un fichier CSV
    - une fois le fichier généré, je dois "flagguer" les lignes comme ayant été exportées.

    C'est cette deuxième étape qui me pose problème :
    - Il n'y a pas de sortie sur le composant Destination de fichier plat.
    - comment utiliser les éléments de la première colonne de mon fichier généré pour mettre à jour les enregistrements correspondants dans ma table ?

    D'avance merci pour vos conseils

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Solution simple et rapide, mais pas safe :
    S'agissant d'un fichier CSV en principe il ne doit pas y avoir d'erreur lorsque tu arrives sur ta destination.

    Donc tu peux rajouter un multicast juste avant la destination, avec une branche vers ta destination fichier plat, et une branche vers un composant OleDbCommand, qui te permettra de flaguer tes données.

    Ce n'est pas sécurisé, car s'il y a une erreur dans le composant destination, tes données seront quand même flaguées

    Solution un peu plus élaborée :
    Tu rajoutes une variable dans laquelle tu vas stocker les ID traités.

    Au niveau du Control Flow, tu as ton DataFlow (appelé Export par exemple) dans lequel tu fais ton export CSV. Dans ce DataFlow, tu peux rajouter un composant script (C#/VB.NET) juste avant ta destination qui te permettra de stocker les IDs traités.

    Toujours au niveau du Control Flow, tu rajoutes un DataFlow (appelé "Flag" par exemple) après le DataFlow "Export", et dans celui-ci tu rajoutes un composant OleDbCommand sur lequel tu utiliseras les valeurs contenues dans la variable afin de flaguer tes données.

    Là c'est sécurisé, car si ton export CSV plante, le DataFlow "Flag" ne sera pas déclenché, et donc tes données ne seront pas flaguées.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Merci pour ta réponse.

    J'avais bien pensé à la première solution mais elle ne me convient pas. Trop risqué.

    Pour ce qui est de la seconde, ça m'intéresse plus mais pour ce qui est de sa mise en œuvre, c'est plutôt obscur pour moi :
    - Comment faire pour stocker les ID traités dans une variable ?
    - Comment indiquer l'ordre de traitement des Dataflow ?
    - Dans le OleDBCommand, quelle entrée ? Et comment passer les ID à ma requête ?

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par calagan99 Voir le message
    - Comment faire pour stocker les ID traités dans une variable ?
    Dans le composant script du DataFlow "Export", tu vas traiter tes données ligne par ligne. Donc l'idée est de rajouter les valeurs une par une dans la variable. Ca va se faire dans la méthode qui finit par ProcessInputRow.

    Voici un tutorial qui pourra te montrer comment paramétrer le composant, et comment coder pour insérer des valeurs dans la variable.

    Citation Envoyé par calagan99 Voir le message
    - Comment indiquer l'ordre de traitement des Dataflow ?
    Dans le Control Flow, tu vas disposer tes deux Data Flow ("Export" et "Flag" par exemple). Pour dire que "Export" doit s'exécuter avant "Flag", il te suffit de cliquer une fois sur "Export" pour le sélectionner. Normalement une flèche verte doit apparaite. Il te suffit de la tirer jusqu'au Data Flow "Flag" puis de lacher. C'est aussi simple que ça

    Citation Envoyé par calagan99 Voir le message
    - Dans le OleDBCommand, quelle entrée ? Et comment passer les ID à ma requête ?
    Bonne question, tu peux mettre un composant de script bidon (vide) en entrée, et le relier à ton OleDbCommand. Pour passer les Ids, voici un lien qui pourra te mettre sur la voie. Si tu galères avec ça, tu peux toujours utiliser un composant script, et exécuter ta requête en C#/VB.NET.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Alors, j'ai un peu avancé en cherchant bien et en lisant tes conseils :
    - j'ai un ADO.NET Datasource dans lequel je fais ma requête de sélection
    - ce composant est "relié" à un FlatFile Destination

    parallèlement, j'ai :
    - un FlatFile Source qui reprend mon fichier CSV généré à l'étape précédente
    - un composant Script dans lequel j'alimente une variable avec le id de mon fichier
    - un OleDBCommand qui fait mon update à partir de la variable.

    Mon problème est que mon FlatFile Destination n'a pas de "sortie" que je puisse "brancher" à mon FlatFile Source.

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Quand tu dis "parallèlement", tu veux dire que tu as deux DataFlows ?

    Citation Envoyé par calagan99 Voir le message
    Mon problème est que mon FlatFile Destination n'a pas de "sortie" que je puisse "brancher" à mon FlatFile Source.
    Ca ne sert à rien de faire cela, sinon ça pourrait générer une boucle infinie

    Pourrais-tu poster 3 captures d'écran ?
    - Une pour le Control Flow
    - Une pour chacun des Data Flow (donc deux en principe, sauf si tu as fait différemment)
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    OK, en lisant ta réponse j'ai compris...
    J'ai donc ajouté un second ControlFlow qui s'enchaine avec le premier et là, ça fonctionne.

    Au final j'ai donc :
    - un ControlFlow "export" qui sélectionne mes données et les mets dans un fichier.
    - un ControlFlow "update" qui utilise le fichier produit à l'étape précédente comme source, stocke les données de ce fichier dans une variable et update ma table à partir de cette variable.

    Les screenshots demandés :

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Voilà c'est bien ça pour la structure Je n'arrive pas à voir le screenshot depuis le bureau, c'est filtré...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Merci pour ton aide DotNetMatt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [10g] UNLOAD Table Oracle dans fichier plat
    Par scalpa63 dans le forum Import/Export
    Réponses: 1
    Dernier message: 22/05/2013, 10h30
  2. Réponses: 2
    Dernier message: 12/07/2010, 16h31
  3. Insertion ligne commentaire dans fichier plat
    Par maryline999 dans le forum ODI (ex-Sunopsis)
    Réponses: 1
    Dernier message: 10/06/2008, 10h25
  4. Pb Creation PDF avec PDFCreator apres impression dans fichier PRN
    Par asimut dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 11/09/2007, 17h46
  5. Réponses: 2
    Dernier message: 20/04/2007, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo