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 :

Import csv via bulk insert


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 181
    Par défaut Import csv via bulk insert
    Bonjour,
    Je souhaite réaliser un import de données via la commande bulk insert (Pas de SSIS). Cependant, ne connaissant pas à l'avance le nombre de colonnes (Je n'utilise qu'une partie des colonnes), il serait nécessaire que l'import créer une table dynamiquement et là je ne vois pas comment réaliser cela.

    Merci par avance pour votre aide
    Cordialement,
    Daniel

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut
    Bonjour,
    peut-être que dans ce cas, un server lié serait plus pratique ?
    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
    EXEC sp_addlinkedserver 
    @server ='ExcelSource',
    @srvproduct ='Excel',
    @provider ='Microsoft.Jet.OLEDB.4.0',
    @datasrc = 'c:\MonFichier.xls',
    @provstr ='Excel 8.0';
     
    EXEC sp_addlinkedsrvlogin 
    @rmtsrvname ='ExcelSource',
    @useself = false,
    @locallogin =NULL,
    @rmtuser ='ADMIN',
    @rmtpassword =NULL;
     
    select * from ExcelSource...Feuil1$
    (le fichier c:\MonFichier.xls étant sur le server of course)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 181
    Par défaut
    Le problème de cette méthode est qu'il est nécessaire de déclarer le serveur lié ou j'ai rien compris....

    Puisqu'en utilisant la méthode indiqué plus haut, j'ai le message suivant qui est affiché:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*7202, Niveau*11, État*2, Ligne*15
    Impossible de trouver le serveur 'ExcelSource' dans sysservers. Vérifiez que le nom du serveur correct a été spécifié. Si nécessaire, exécutez la procédure stockée sp_addlinkedserver pour ajouter ce serveur à sysservers.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut
    Que donne ce code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    EXEC sp_addlinkedserver 
    @server ='ExcelSource',
    @srvproduct ='Excel',
    @provider ='Microsoft.Jet.OLEDB.4.0',
    @datasrc = 'c:\MonFichier.xls',
    @provstr ='Excel 8.0';

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 181
    Par défaut
    Cela fonctionne mais comment stocker le contenu dans une table?
    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * INTO TEMP FROM ExcelSource...FEUILLE1$;
    Mais il m'indique une erreur

    Par contre, une question complémentaire:
    Est-ce que le lien est stockée définitivement?
    Est-ce que lors d'un appel ultérieure, je dois recréer le lien?
    Puis-je détruire un lien?

    Y a beaucoup de question mais on y arrive.

    Au passage, je tiens à te remercier

  6. #6
    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 : 43
    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
    Par défaut
    Bonjour,

    Mais il m'indique une erreur
    Quelle est-elle ?

    FEUILLE1$ est-il le nom d'une zone de données dans votre fichier Excel ?

    Est-ce que le lien est stockée définitivement?
    Oui, jusqu'à ce que vous le supprimiez

    Est-ce que lors d'un appel ultérieure, je dois recréer le lien?
    Non

    Puis-je détruire un lien?
    Bien sûr, avec la procédure stockée système sp_dropserver

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut
    Désolé j'ai un peu perdu tout ca de vue.
    En tout cas il me semblait que les serveurs liés marchaient avec CSV.
    Je pense que le problème est le même qu'ici :
    Citation Envoyé par DanaX Voir le message
    Je me pose une question:
    Pourquoi ne puis-je utiliser cette méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * INTO #TEMP FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
    			'Data Source=D:\FILE.csv;Extended Properties=Excel 8.0')...[Lam$]
    Le message d'erreur suivant s'affiche;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Msg*7399, Niveau*16, État*1, Ligne*1
    Le fournisseur OLE DB "Microsoft.Jet.OLEDB.4.0" du serveur lié "(null)" a rapporté une erreur. Le fournisseur n'a donné aucune information quant à cette erreur.
    Msg*7303, Niveau*16, État*1, Ligne*1
    Impossible d'initialiser l'objet de la source de données du fournisseur OLE DB "Microsoft.Jet.OLEDB.4.0" du serveur lié "(null)".
    C'est parfois un problème de droits. Pour créer un serveur lié, openrowset, opendatasource, un DSN temporaire doit être créé dans le repertoire temp. Or si le user connecté à SQL n'a pas les droits en écriture sur ce répertoire, ca pose problème.
    Voir ici pour les solutions possibles et explications détaillées.

Discussions similaires

  1. [MySQL] Import fichier CSV via l'interface MySQL
    Par RENAUDER dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 09/02/2009, 16h19
  2. importation CSV via Wlanguage
    Par chapeau_melon dans le forum WinDev
    Réponses: 3
    Dernier message: 13/01/2009, 07h36
  3. Insertion en bloc via BULK INSERT avec c# (2.0)
    Par killysui dans le forum C#
    Réponses: 5
    Dernier message: 19/12/2008, 14h49
  4. [BULK INSERT] import de certaines colonnes uniquement
    Par _Eric_ dans le forum Développement
    Réponses: 1
    Dernier message: 12/10/2008, 00h55
  5. Importation de CSV via ODBC dans Access
    Par inc002 dans le forum Bases de données
    Réponses: 3
    Dernier message: 31/03/2008, 16h03

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