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 :

Création de table dynamiquement à partir d'un dataset


Sujet :

SSIS

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut Création de table dynamiquement à partir d'un dataset
    Bonjour,
    Je voudrais créer dynamiquement une table (if exists DROP TABLE CREATE TABLE) dans un data flow à partir d'un dataset (type Excel, fichier plat, BD, Web service) avec ajout de colonne dérivée...
    Naïvement je me dis que puisque le système connait la liste des colonnes avec leur type : ça doit être faisable mais visiblement je n'arrive pas à trouver.

    Pour être sur d'être bien compris je veux ceci de façon dynamique (je veux dire par là que si ma source de données (Web Serive, BD, Excel) évolue, je n'aurai pas à modifier la package : il le ferait tout seul. Je sais qu'en ADO ou OleDb on peut créer une nouvelle table mais c'est statique et ce n'est pas ce que je veux.

    Si quelqu'un peut me fournir des pistes ce serait sympa.

  2. #2
    Membre averti
    Homme Profil pro
    Consultant B.I. / .net
    Inscrit en
    Mai 2003
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant B.I. / .net

    Informations forums :
    Inscription : Mai 2003
    Messages : 215
    Points : 445
    Points
    445
    Par défaut
    Ce que vous souhaitez faire n'est pas possible avec SSIS.

    Vous pouvez utiliser des tâches du control flow pour créer des structures de données (Execute SQL Task). Ces requêtes de création de structure peuvent être dynamiques (en utilisant des variables).

    Mais dans le data flow, les metadonnées du flux (donc le nombre et le type des colonnes prises en compte) ne sont pas dynamiques, elles sont figées au moment du design.
    C'est pourquoi il n'y a aucun composant prévu dans le dataflow pour créer des structures. Vous pourriez utiliser une transofmration script pour exécuter sur une connexion SQL un script de création de structure, mais celui-ci serait toujours le même car les métadonnées du flux ne s'adapteront jamais seules.

    Le seul moyen de faire ce que vous souhaitez avec SSIS, est très couteux, il s'agit de créer le package de manière programmatique et non avec l'IDE en se plongeant dans le C#.

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    Décu mais j'ai compris.

    La solution la + générique que j'ai trouvé (qui ne fonctionne qu'avec un BD) est de créer un package pour lequel j'ai crée une variable de table à créer, une table d'origine, les colonnes à créer, le nom et la clé de la clé primaire.

    Après je créé un flux de données avec une requête Select SQL avec paramètre (qui lie la table INFORMATION_SCHEMA.COLUMN) pour récupérer toutes les colonnes de la tables d'origine.

    Ensuite je passe par un script de transformation (de type destination) ou je créé dans une variable l'instruction CREATE en fonction des colonnes, type de la table d'origine, la clé primaire, les colonnes à rajouter et le nom de la table à créer en fonction des variables.

    Puis à la suite de mon flux de données je mets un flux de contrôle pour lancer une requête sql à partir de la variable crée dans le flux de données.

    Un autre process dans le même style pour le ALTER TABLE et un test conditionnel entre les deux process suivant que la table existe me permet de créer un package qui fait évoluer les champs d'une table en fonction d'une autre. Si la table source évolue, la table destination évoluera sans modifier le package.

  4. #4
    Membre averti
    Homme Profil pro
    Consultant B.I. / .net
    Inscrit en
    Mai 2003
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant B.I. / .net

    Informations forums :
    Inscription : Mai 2003
    Messages : 215
    Points : 445
    Points
    445
    Par défaut
    Votre table effectivement s'adaptera en terme de structure, mais votre flux d'alimentation lui, ne s'adaptera pas. Donc les nouvelles colonnes seront vides dans votre table destination et pire, des colonnes supprimées ferait planter le process.

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

Discussions similaires

  1. MAJ Table SQL à partir d'un DataSet
    Par Loubna.B dans le forum C#
    Réponses: 2
    Dernier message: 04/11/2009, 12h44
  2. création d'un planning à partir d'un DataSet
    Par Jeff_p dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/09/2009, 15h10
  3. Création de table dynamiquement Transact-SQL
    Par mickael28 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/01/2009, 09h45
  4. Réponses: 3
    Dernier message: 03/09/2008, 15h47
  5. Réponses: 1
    Dernier message: 27/05/2008, 10h50

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