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

Développement SQL Server Discussion :

SSIS : ListeTables paramétrable


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Par défaut SSIS : ListeTables paramétrable
    Bonjour,

    J'aimerais dans un lot SSIS (SQL Server 2008 R2) pouvoir paramétrer la propriété TablesList dans un "Transfert d'objet SQL Server". En effet, je ne connais pas à l'avance la structure des tables à transférer et je ne peux pas faire de SELECT * INTO ... car la destination est un serveur lié chez mon hébergeur. (Et je ne peux pas, depuis l'hébergeur, créer un serveur lié vers mon serveur)
    J'ai essayé de stocker dans une variable la liste des tables à transférer, mais rien n'y fait.
    En cherchant sur le net je n'ai trouvé que des astuces consistant à passer par un script ActiveX pour modifier dynamiquement TablesList... N'y-a-t'il pas plus simple ?

    En vous remerciant par avance.

    Adrien

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    En passant dynamiquement la valeur de TableList via les expressions sur la tache de transfert d'objet?

  3. #3
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Qu'avez vous tenté de faire avec la variable?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Par défaut
    Merci de prendre le temps... ;-)

    Pour simplifié, je ne vais pas tenter une liste de table mais simplement une table à la fois (au pire je mettrais le tout dans un ForEach).

    Je stock donc dans une variable [NOMTABLE] (dont l'entendue est le package entier) de type string le nom de la table à transférer.

    Ensuite, dans l'éditeur de tâche de Transfert d'objet, dans la partie Expressions, je renseigne l'expression TablesList avec la variable @[User::NOMTABLE]

    A l'éxécution, j'obtiens le message suivant :
    "Des erreurs récupérables se sont produites pendant l'enregistrement du package : Erreur sur tache de transfert d'objet SQL Server : Le résultat de l'expression «*@[User::NOMTABLE] *» sur la propriété «*TablesList*» ne peut pas être écrit dans la propriété. L'expression a été évaluée, mais ne peut pas être définie sur la propriété.
    merci encore pour votre aide.

    Cdlt,

  5. #5
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Ok... avez vous mis delayvalidaton à true sur la tache?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Par défaut
    Bonjour,

    Je l'avais fait sur le Package mais pas sur le tâche. Je viens d'essayer, mais le problème reste le même :

    Erreur*: Le résultat de l'expression «*@[User::NOMTABLE]*» sur la propriété «*TablesList*» ne peut pas être écrit dans la propriété. L'expression a été évaluée, mais ne peut pas être définie sur la propriété.

    J'ai aussi essayé en mettant dbo.matable dans ma variable.... idem.

    J'ai l'impression que le format string de la variable ne convient pas à la propriété...

    Merci

  7. #7
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Thanks Phil. I had read through that article as well, but I was hoping there was an easier way to do it through the expression builder.

    I had also sent an e-mail off to Jamie Thomson from SSIS Junkies and the reply that he sent states that you cannot set a collection property through an expression.

    So it appears that the only way to do this is to use a script task.

    Thanks.



    John Rowan
    Je suis tombé sur cette discussion...
    avec vous essayé avec une variable de type object?

    Mais je doutes que ça fonctionne...

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Par défaut
    Je doute que cela fonctionne, mais de toute façon, je n'arrive pas à tester cela car si je met ma variable en type Objet, je n'arrive plus à lui attribuer une valeur.

    Je vais fouiller un peu + sur les sites anglophones, si je trouve une solution, je viendrai bien sûr la poster ici.

    cdlt,

  9. #9
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Je doute que cela fonctionne, mais de toute façon, je n'arrive pas à tester cela car si je met ma variable en type Objet, je n'arrive plus à lui attribuer une valeur.
    Il faut passer par un script .NET et caster votre object en String[]

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Par défaut
    Après plusieurs tests et recherches, j'ai fini par y arriver. Voici comment j'ai procédé :

    1- Création du package [UPLOAD_EXTRACTION_PREPROD.dtsx] de transfert avec toutes le connexions enregistrées dans un fichier de configuration (fait en passant par le menu SSIS -> Configuration de Package)
    2- Création d'un objet "Transfert d'objet SQL" [movetables] dans lequel les serveurs sources et cibles sont correctement renseignés
    3- Création d'un package [UPLOAD_EXTRACTION_PREPROD_CALL.dtsx]
    4- Ajout d'une tache de script dans ce package dont le code est ci-dessous

    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
     
     public void Main()
            {
               Microsoft.SqlServer.Dts.Runtime.Application application = new Microsoft.SqlServer.Dts.Runtime.Application();
               //object packagename = Dts.Connections["Tables"].AcquireConnection(null);
     
               string packagename = @"\\SERVEUR1\SSIS\UPLOAD_EXTRACTION_PREPROD.dtsx";
               Microsoft.SqlServer.Dts.Runtime.Package package = application.LoadPackage(packagename.ToString(), null);
     
               TaskHost th = package.Executables["movetables"] as TaskHost;
     
               System.Collections.Specialized.StringCollection sc = new System.Collections.Specialized.StringCollection();
               sc.Add("TABLE_201110031547_ID376");
               th.Properties["TablesList"].SetValue(th, sc);
               Dts.TaskResult = (int)package.Execute();
     
     
               //Dts.TaskResult = (int)ScriptResults.Success;
    Exécution du Package [UPLOAD_EXTRACTION_PREPROD_CALL.dtsx]

    En ce qui me concerne, ça fonctionne, je n'ai plus qu'à passer en paramètre la ou les tables que je veux transférer et à faire référence à ce paramètre dans le script à la place de "TABLE_201110031547_ID376".

    Les critiques et commentaires sont les bienvenus s'il y a mieux ;-)

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/01/2011, 18h17
  2. Réponses: 3
    Dernier message: 08/02/2010, 09h16
  3. Réponses: 3
    Dernier message: 23/06/2009, 10h06
  4. [SSIS 2k5] - Paramètre au lancement.
    Par loytstf dans le forum SSIS
    Réponses: 3
    Dernier message: 20/02/2009, 13h55
  5. [SSIS][2k5] Nom de paramètre non reconnu
    Par clementratel dans le forum SSIS
    Réponses: 0
    Dernier message: 17/02/2009, 13h42

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