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 :

Exporter le résultat d'une requete dans un fichier texte en transact


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Points : 11
    Points
    11
    Par défaut Exporter le résultat d'une requete dans un fichier texte en transact
    bonjour,

    Je cherche à exporter le résultat d'une requete dans un fichier plat dont la première ligne comporterais le nom des colonnes.

    Je ne pense pas pouvoir utiliser DTS car la requete ne ramène pas forcement le même nombre de colonnes et en plus les colonnes ne sont pas forcement les mêmes... Il faut donc que quel que soit le résultat de la requete, un fichier plat soit créer de manière completement dynamique.

    Merci d'avance.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    J'ai l'impression que ce n'est pas possible en transact SQL...

    Par contre ça semble possible à l'aide de la commande isql... Si l'un d'entre vous connait bien cette commande je suis preneur d'une solution

  3. #3
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Tu peux utiliser osql.exe avec les options -s (pour le séparateur) et -o (output).

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    osql -E -s "," -Q "SELECT * FROM AdventureWorks.Person.Contact" -o export.csv
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup rudib !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par rudib
    Bonjour,

    Tu peux utiliser osql.exe avec les options -s (pour le séparateur) et -o (output).

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    osql -E -s "," -Q "SELECT * FROM AdventureWorks.Person.Contact" -o export.csv
    Bon en fait je re-ouvre ce post car je n'arrive pas à faire fonctionner cette solution convenablement...

    Cette commande m'exporte bien le résultat dans un fichier texte mais le contenu du fichier est formaté bizarement.

    Déjà, la commande que j'utilise est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    osql -U sa -P **** -S MONSERVEUR -d MABASE -h-1 -s-1 -Q "SET NOCOUNT ON select INTCO+','+DATASRC+','+CATEGORY+','+ENTITE+','+NATURE+','+TIME+','+PLAN_COMPTE+','+METIER_PRESTATION+','+CAST(AMOUNT as nvarchar) from [TEMP_TBL]" -o "C:\fileout.txt"
    -h-1 : pour ne pas avoir l'entête de colonne car le fichier de sortie contient alors "--------------------" sur la deuxième ligne du fichier

    Je n'utilise pas le paramètre "s" pour spécifier le séparateur de colonne car il m'ajoute des espaces entre chaque champs. Exemple pour deux ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    NON_INTERCO         ,IMPORT_CUMULE       ,REALISE             ,
    	E3111               ,0LIA01              ,2008.MAR            ,
    	60690               ,P2                  ,             443.9944100000
    NON_INTERCO         ,IMPORT_CUMULE       ,REALISE             ,
    	E3111               ,0LIA01              ,2008.MAR            ,
    	60690               ,P3                  ,             134.5772100000
    Je reconstruit donc ma ligne dans la requete? d'où le "select INTCO+','+DATASRC+','+CATEGORY+','+ENTITE+','+NATURE+','+TIME+','+PLAN_COMPTE+','+METIER_PRESTATION+','+CAST(AMOUNT as nvarchar) from [TEMP_TBL]".

    Mais cela me donne pour les deux premières lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NON_INTERCO,IMPORT_CUMULE,REALISE,E3111,0LIA01,2008.MAR,60690,P2,443.9944100000
     
     
    NON_INTERCO,IMPORT_CUMULE,REALISE,E3111,0LIA01,2008.MAR,60690,P3,134.5772100000
    Alors que la requete "select INTCO+','+DATASRC+','+METIER_PRESTATION+','+CAST(AMOUNT as nvarchar) from [TEMP_TBL]" donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NON_INTERCO,IMPORT_CUMULE,P2,443.9944100000                                    
     
    NON_INTERCO,IMPORT_CUMULE,P3,134.5772100000
    et "select INTCO+','+METIER_PRESTATION+','+CAST(AMOUNT as nvarchar) from [TEMP_TBL]" donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NON_INTERCO,P2,443.9944100000                                           
    NON_INTERCO,P3,134.5772100000
    Remarquez tous les espaces ajoutés à la suite des champs...

    De plus il me semble que la longueur de la ligne ait un maximum. Une fois ce maximum atteint, la commande osql retourne à la ligne suivante...

    Bref impossible de m'en servir pour faire un import correct.

    Si l'un d'entre vous à une idée... A priori mon besoin semble simple.... dumper une table dans un fichier plat !!! et ce sans connaitre la structure de la table à l'avance ! je veux faire en quelque sorte un bulk insert dans l'autre sens...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Je viens de trouver une piste potentiel en utilisant la commande "bcp" au lieu de "osql"...

    Je cherche de la doc dessus...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    OK, je viens de trouver la solution à mon problème en utilisant la commande BCP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ------------------------------
    -- Pour exporter une requète --
    ------------------------------
    bcp "select * from [Ma_Base]..[Ma_Table]" queryout "C:\File_out.txt" -c -U sa -P *** -S Mon_Serveur -t ","
     
    ----------------------------
    -- Pour exporter une table --
    ----------------------------
    bcp "[Ma_Base]..[Ma_Table]" out "C:\File_out.txt" -c -U sa -P *** -S Mon_Serveur -t ","
    Le paramètre "-t" permet de choisir un separateur de colonne (par défaut [TAB]).

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/09/2009, 01h44
  2. Copier le résultat d'une requete dans un fichier txt
    Par Soulkeum dans le forum Développement
    Réponses: 4
    Dernier message: 22/11/2007, 13h48
  3. Réponses: 2
    Dernier message: 15/11/2007, 12h07
  4. [SQL] Comment je peux mettre les résultat d'une requete dans un fichier
    Par Maria1505 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 10/12/2006, 21h44
  5. Réponses: 8
    Dernier message: 23/05/2006, 12h13

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