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

Linux Discussion :

export de données MS SQL vers CSV - Bash (Linux)


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 3
    Points
    3
    Par défaut export de données MS SQL vers CSV - Bash (Linux)
    Bonjour à tous,

    Je rencontre un soucis sur les exports de données de ma base MSSQL vers un fichier csv.
    $sqlserver, $sqluser ,$sqlpass , $sqldb,$workingrep et $workingfile sont des variables déclarées précédemment dans mon script bash

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #generation du fichier temporaire
    sqlcmd -S $sqlserver -U $sqluser -P $sqlpass -d $sqldb -i $workingrep/requete.sql -s";" -W -w 10000 -o $workingrep/$workingfile.tmp
     
    #retraitement du fichier temporaire
    cat /$workingrep/$workingfile.tmp | sed '2d' | sed 's/NULL//g' | iconv -c -f utf8 -t ms-ansi > $workingrep/$workingfile.csv
    Le soucis que j'ai un soucis au niveau du retraitement car dans mon fichier csv généré (par mon automate), j'ai des décalages à la ligne lorsque dans certains champs il y a des caractères spéciaux. Pourtant le copié-collé manuel du résultat de ma requête, dans un fichier csv respecte la casse des champ en base.

    Pouvez-vous m'aider SVP??

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Le post-traitement, c'est bien. Mais généralement, on conseille de demander à la base de données de faire le boulot le mieux possible. C'est son rôle.
    Tu peux fixer le format de sortie de ta base.
    En php, on fait des trucs comme mysqli_set_charset($$link, 'utf8'); qui fixe le format de sortie à utf8 même si la base a un jeu de caractère classique Microsoft.
    En Mysql, on peut faire SET NAMES 'charset_name' [COLLATE 'collation_name'] pour fixer le jeu de caractères. Typiquement:
    D'autre part, je suis un peu surpris que tu veuilles supprimer toutes les valeurs NULL.

    j'ai des décalages à la ligne lorsque dans certains champs il y a des caractères spéciaux.
    Avec les fichiers csv, sans doute préféreras-tu utiliser des outils comme awk qui se moque des décalages, plutôt que sed.
    Mais si le problème est carrément un caractère défiguré, il faut régler cela d'abord.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 281
    Points : 12 730
    Points
    12 730
    Par défaut
    Bonjour,

    Peux-tu nous donner un exemple concret du problème car, pour l'instant, c'est obscur...

    PS: cat fichier | sed .... est une abérration car sed sait lire des flux de type fichier, donc on remplace par sed .... fichier.
    Cordialement.

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 281
    Points : 12 730
    Points
    12 730
    Par défaut
    Ah, j'avais pas compris que c'était du mysql...
    Cordialement.

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    C'est du MS SQL

    Voici l'export comparatif de mon script bash(orange) et de l'export manuel (vert).

    En rouge, le champ qui crée le saut de ligne (ce champ a bien un format nvarchar(255)).
    Je retire NULL par vide pour des besoins internes
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 281
    Points : 12 730
    Points
    12 730
    Par défaut
    Oupss... connait pas excel mon ordi et L.O ne restitue pas les couleurs...

    Ensuite, dans tes 2 exemples, il n'y a pas le même nombre de champs, je suppose que c'est une erreur et que l'on est bien censé avoir toujours le même nombre de champs ?

    Si c'est pas le cas, il faudrait nous expliquer comment déterminer le nombre de champs d'une ligne et leur représentation, car sinon, il n'y a pas de solution...

    Après, ton souci ici, c'est que certains de tes champs sont du type n'importe quel caractère y compris le retour à la ligne (et certainement aussi le ";" que tu utilises comme séparateur).
    Pour le cas des retour à la ligne, tu peux le gérer en comptant le nombre de champs récupéré sur une ligne au sens unix et concaténer la ligne suivante si le nombre de champs n'est pas atteint. Par contre si tu as des cas avec des ";" dans les champs eux-même, ça risque d'être compliqué.
    Cordialement.

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    Citation Envoyé par lilken Voir le message
    C'est du MS SQL
    et il n'y a pas moyen de faire, d'une manière ou d'une autre, avec MSsql, ce que suggère Flodelarab ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. [2008R2] plannification export sql vers csv tabulation
    Par backdraf dans le forum Développement
    Réponses: 8
    Dernier message: 07/08/2013, 00h57
  2. Exporter des données de SQL vers CSV
    Par othmane16 dans le forum SQL
    Réponses: 4
    Dernier message: 14/05/2012, 15h00
  3. [Excel] Exporter un tableau PHP vers CSV ou XLS
    Par mariafan dans le forum Bibliothèques et frameworks
    Réponses: 20
    Dernier message: 28/10/2011, 11h53
  4. Comment exporter un fichier Excel vers CSV
    Par machipot dans le forum VBA Access
    Réponses: 0
    Dernier message: 09/06/2008, 22h09
  5. Exporter une requête SQL vers excel
    Par Info_76 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/08/2007, 09h09

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