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 :

Script VB.NET pour incrémentation de variable


Sujet :

SSIS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Par défaut Script VB.NET pour incrémentation de variable
    Bonjour,

    J'ai besoin de vos lumières svp, j'ai besoin de faire un composant script dans ssis 2005 qui permet de boucler sur les lignes d'un dataset en entrée.

    Ces lignes contiennent des données ordonnées par 'champ1',je souhaite via ce script attribuer une valeur à un champ nommé 'Chp2' de type int de la manière suivante:

    Parcourir les lignes, pour la première ligne, il faut attribuer la valeur d'une variable en entrée au 'Chp2' de type int
    Après il faut tester le lignes suivantes si la valeur du 'champ1' ne change pas on ne fait rien on gare la même valeur pour le 'Chp2' sinon si la valeur change on incrémente 'Chp2' de 1 ainsi de suite jusqu'à la fin des lignes.

    Merci d'avance.

  2. #2
    Membre Expert Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Par défaut
    Vous savez une petite recherche vous permet de trouver plein de réponses à cette question, peut être la plus demandée et traitée depuis 7 ans et les débuts du produit.
    Une réponse ici par exemple, la première donnée par Google en anglais.

    http://beyondrelational.com/modules/...e-in-ssis.aspx

    qui donne le script suivant, dans lequel vous devez ajouter votre condition d'incrémentation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Public Class ScriptMain
        Inherits UserComponent
        'Declare a int variable
        Dim Counter As Integer
     
        Public Sub New()
            'Initialise the variable
            Counter = 0
        End Sub
     
        Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
            Counter += 1
            Row.MaxEmpId = Counter
        End Sub
     
        Public Overrides Sub PreExecute()
            MyBase.PreExecute()
            Counter = Integer.Parse(Variables.MaxId)
        End Sub 
    End Class
    Bonne journée!

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Par défaut SSIS 2005 INcrémentation variable group bu un autre champ
    Merci pour votre réponse.

    Cependant je pense que vous n'avez pas très bien lu mon message ou vous ne l'avez pas compris.

    Mon problème c'est de PARCOURIR toute les lignes du dataset et de comparer ligne par ligne le champ 1
    Si la valeur du champ 1 ne change pas je n'incrémente pas la variable sinon je l'incrémente et le script que vous m'avez donné ne fait pas ça.

    Merci encore pour votre aide.

    Toutes vos suggestions seraient les bienvenue.

  4. #4
    Membre Expert Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Par défaut
    Si si j'ai bien compris, c'est un cas assez classique.
    C'est bien ce que je voulais dire par

    vous devez ajouter votre condition d'incrémentation
    Ca signifie simplement que vous utilisez une valeur définie en .NET qui stocke la dernière valeur vue, et que dans le ProcessInputRow vous testez la valeur stockée à celle de la ligne actuelle, et si changement vous incrémentez le compteur. Ca fait donc deux valeurs à stocker en variable (Value + Counter) au lieu d'une (Counter) dans ce script. Le reste (test d'affectation de la valeur en cours du compteur, ainsi que mise à jour si changement des deux variables du script, sans compter le cas d'initialisation) n'est pas algorithmiquement très complexe.

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Par défaut SSIS 2005 Incrémentation variable group by un autre champ
    Bonjour,

    "Ca signifie simplement que vous utilisez une valeur définie en .NET qui stocke la dernière valeur vue"

    Comment on fait pour stocker la dernière valeur vue dans une variable?

    En utilisant le script?

    Je suis débutant sur SSIS et je ne connais pas VB.net donc si vous pouviez m'aider, je vous en remercie d'avance.

    Merci.

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Par défaut SSIS 2005 Incrémentation variable
    Bonjour,

    Je travaille sur un composant script SSIS 2005, j'ai une variable que j'utilise dans mon package, je souhaite appeler cette variable au niveau de mon script et l'incrémenter autant de fois que de lignes d'entrée dans mon dateset.

    J'ai fait ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Public Class ScriptMain
        Inherits UserComponent
        Dim Counter As Integer
     
     
        Public Sub New()
     
        '    'Initialise the variable
     
           Counter = Me.Variables.vNNN006
        '    'MsgBox(Counter)
     
        'End Sub
        Public Overrides Sub Entrée0_ProcessInputRow(ByVal Row As Entrée0Buffer)
            '
            ' Add your code here
            ' 
            Counter = Me.Variables.vNNN006
     
            Counter += 1
     
            Row.EDOCS = Counter
     
            'MsgBox.Show(Counter.ToString())
            MsgBox(Counter)
        End Sub
    End class
    Mais le problème c'est que je n'arrive pas à l'exécuter, j'ai une exception :

    Erreur de validation. Tâche de flux de données*: Composant Script [296]*: System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel. ---> Microsoft.SqlServer.Dts.Pipeline.ReadOnlyVariablesNotAvailableException: La collection de variables verrouillée pour l'accès en lecture n'est pas disponible à ce stade. à Microsoft.SqlServer.Dts.Pipeline.ScriptComponent.get_ReadOnlyVariables()...
    Je ne comprends pas d'où vient cette exception, je n'ai pas d'erreur au niveau de mon script.

    Merci d'avance pour votre aide.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2015, 11h36
  2. Appel d'un script via CURL pour poster des variables
    Par mckilleron dans le forum Langage
    Réponses: 1
    Dernier message: 18/07/2013, 10h37
  3. Script shell pour persister les variables exportées
    Par Giovanny Temgoua dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 03/10/2006, 09h07
  4. [C++.NET] Idee pour sauvegarde de variables
    Par raboin dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 02/05/2006, 16h03
  5. Réponses: 3
    Dernier message: 11/11/2005, 12h59

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