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

MS SQL Server Discussion :

Insertion des données Excel dans une base SQL-Server


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant (domaine de prédilection java)
    Inscrit en
    Mars 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant (domaine de prédilection java)
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 71
    Points : 62
    Points
    62
    Par défaut Insertion des données Excel dans une base SQL-Server
    Bonjour tout le monde!
    Je développe actuellement une application en Java, qui "attaque" une base sql server, dans le cadre d'un stage.

    L'entreprise utilise de nombreux fichiers Excels, dont la transformation en base de données constitue le support de mon futur travail.

    Mon problème n'est pas de savoir comment se fait l'import d'un fichier excel dans une base sql server, mais le remplissage des données dans la base, de manière automatique et cohérente.

    Je m'explique: j'ai un fichier de 5000 lignes et 20 colonnes. J'ai déja réalisé "l'éclatement" en un modèle relationnel cohérent, ce qui m'a conduit à la création de la base de donnée en question dont les tables(vous le devinez ) sont vides.

    Maintenant je voudrais remplir les informations dans la base de données. C'est relativement simple pour les tables statiques, mais pour les tables dynamiques, je m'arrache les cheveux car il faut faire correspondre le bon "Id"....manuellement dans SSM. Alors pour 5000 lignes.....
    S'il vous plait y 'a t-il un raccourci que je puisse utiliser et comment le faire? je vous remercie.

  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 : 42
    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
    Points : 3 173
    Points
    3 173
    Par défaut
    Qu'entendez vous par id?
    Avez vous ces id dans excel?

    Vous devez vous baser sur ce qui représente de manière unique chacune de vos entités.

    (exemple: codeClient pour les client etc.).

    Faites un package SSIS qui importe votre fichier dans une table puis alimentez (UPDATE/INSERT) les différentes tables via des requêtes.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  3. #3
    Membre du Club
    Homme Profil pro
    Etudiant (domaine de prédilection java)
    Inscrit en
    Mars 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant (domaine de prédilection java)
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Qu'entendez vous par id?
    Avez vous ces id dans excel?

    Vous devez vous baser sur ce qui représente de manière unique chacune de vos entités.

    (exemple: codeClient pour les client etc.).

    Faites un package SSIS qui importe votre fichier dans une table puis alimentez (UPDATE/INSERT) les différentes tables via des requêtes.
    J'ai déja réalisé l'import du fichier dans une table. Mon problème est justement la rédaction des requêtes, ou plutot le traitement par lot de celles-ci. je ne voudrais pas écrire 5000 fois la même requête....en changeant juste les paramètres...

  4. #4
    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 : 42
    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
    Points : 3 173
    Points
    3 173
    Par défaut
    Quelques requettes écrites de manière ensembliste suffit:

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    --UPDATE:
    UPDATE C
    SET C.prenom=A.prenom
    FROM dbo.CLIENT C
        INNER JOIN TABLEFICHIERIMPORTE A
            ON A.nom=C.nom
    --INSERT:
    INSERT INTO dbo.CLIENT (nom,prenom)
    SELECT nom,prenom
    FROM TABLEFICHIERIMPORTE A
    WHERE NOT EXISTS(SELECT * FROM dbo.CLIENT C
                                WHERE C.nom=A.nom)
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Sans le modèle, ou au moins un extrait de celui-ci, il va être difficile de vous aider plus que ce que vous a proposé le valeureux iberserk

    @++

  6. #6
    Membre du Club
    Homme Profil pro
    Etudiant (domaine de prédilection java)
    Inscrit en
    Mars 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant (domaine de prédilection java)
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Merci les mecs de ces réponses, quoique iberserk je comprend pas très bien ta requête...:, (je débute en sql ou plutot t-sql ). Je vais tenter de mieux énoncer mon problème.
    Voila, ce que j'ai fait jusqu'à présent c'est d'utiliser du code java pour l'insertion dans la base de données, et ça marche, mais pas comme je le souhaiterais.
    Concrètement, j'ai importé mon fichier excel via ssms dans une table, réalisé la connexion à la base dans java, et essayé de faire correspondre à chaque champ son équivalent dans ma base, en récupérant la clé générée.
    Exemple concret:dans ma base j'ai 4 tables(je vais pas donner les noms exacts, secret d'entreprise oblige...mon tuteur connait très bien ce forum....)
    Contrat(id_contrat, id_pays, id_techno, nom_contrat); Techno(id_techno, nom_techno), Pays(id_pays, id_region, nom_pays), Region(id_region, nom_region). Les clés sont autoincrémentées.
    Le fichier(transformé en table) a les champs suivants table_Importee(nom_contrat,nom_techno, nom_pays, nom_region). Dans mon code java, j'insère d'abord le nom de région, je récupère la clé que j'insère dans la table pays en même temps que le nom_pays, puis récupère la clé et enfin insère dans la table Contrat. Schématiquement ça donne Region-->Pays--> Contrat d'une part, et Techno-->Contrat d'autre part.

    Jusque là, ça fonctionne, mais comme je l'ai souligné plus haut, c'est pas comme ce que je souhaiterais; pourquoi?
    -->j'aimerais supprimer les lignes dans la table table_Importee où le même nom de contrat revient. Je pourrais avoir par exemple: (OM, F50,Allemagne, EUR) et (OM, F60, France, Eur), eh bien j'aimerais que l'un des deux disparaisse, soit au niveau de la table (suppression de ces "doublons" là), ou lors de l'insertion(si un nom similaire existe, on passe au suivant).

    -->Il est clair que les noms de pays et noms de région vont rester "identiques", et juste être réutilisés dans les 5000 enregistrements, alors j'aimerais pouvoir n'insérer qu'une seule fois un nom de région ou un nom de pays.

    Bien voila, je m'arrête ici pour l'instant, en vous remerciant d'être arrivé au bout de ce loooooooooooonnng message.

Discussions similaires

  1. Intégrer des données excel dans une BD sql server
    Par rashania dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/05/2010, 17h41
  2. Réponses: 1
    Dernier message: 17/09/2008, 13h40
  3. Insertion des contenus gtkentry dans une base de données
    Par charles9 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 02/06/2008, 18h13
  4. Réponses: 3
    Dernier message: 27/07/2007, 13h06
  5. Insérer des données Excel dans une base Access ?
    Par MaTHieU_ dans le forum Access
    Réponses: 3
    Dernier message: 22/06/2005, 15h11

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