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

Scripts/Batch Discussion :

Problème de guillemets + variable caractère


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Problème de guillemets + variable caractère
    Je vous joins un fichier .txt (qui est un fichier.bat chez moi que j'exécute). Il permet de de se connecter à SQL Server pour exporter une base en format .CSV
    Le problème se situe à ce niveau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -Q "select * from %nameTable%"
    Sauf que j'ai une erreur à cause de la variable nomTable qui possède des "" lors de sa déclaration puis la on en remet un ' " ' juste après..

    Pour faire marcher mon fichier. bat je suis obligé d'écrire en dur 'tableok' o lieu de %_nomTable%.

    Existe t-il un moyen pour arranger ça ? merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Je me permets de relancer le sujet,
    Personne n'a une idée??
    Déjà juste savoir si c'est possible; merci d'avance

  3. #3
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    salut,

    la pièce jointe n'était pas nécessaire dans l'absolu, voici son contenu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set server="IFPU000"
    set dataBaseName="ICS"
    set login="linea"
    set passWord="lineas"
    set name_table="tableok"
    set csvFile="C:\Documents and Settings\Test_Export.csv"
    
    
    sqlcmd -S %server% -d %dataBaseName% -U %login% -P %passWord% -Q "select * from %nameTable%" -s"," -o csvFile
    sinon déjà en ligne 5 tu initialises "name_table" et dans ta requête,
    à la place, tu utilises "nameTable", c'est pas bon...

    Pour initialiser correctement, tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    set "server=IFPU000"
    set "dataBaseName=ICS"
    set "login=linea"
    set "passWord=lineas"
    set "tableName=tableok"
    set "csvFile=C:\Documents and Settings\Test_Export.csv"
    
    sqlcmd -S "%server%" -d "%dataBaseName%" -U "%login%" -P "%passWord%" -Q "select * from [%tableName%]" -s"," -o "%csvFile%"
    Note la présence des accolades pour prévenir d'éventuels espaces dans le nom de la table, et le changement du nom de la variable "nameTable" en "tableName".

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour minnesota et merci d'avoir repondu!

    Alors déjà pour la variable nom_table c'est une erreur de ma part mais quand je l'ai testé j'avais le même nom de variable utilisé dans la requête.

    Ensuie j'ai une petite question concernant la déclaration des variables:pourquoi tu écris ça:
    au lieu de ça: ?
    C'est justement pour plus avoir ce problème avec les variables suivi de guillemets ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour à tous,

    J'ai essayé d’exécuter de nouveau le fichier .bat en tenant compte des remarques de minnesota mais j'ai de nouveau la même erreur qui se produit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg 208, Level 16, State 1, Server IFPU000, Line 1
    Invalid object name 'tableok'.
    Comment faire pour résoudre ce problème s'il vous plaît??
    Merci d'avance de votre aide

  6. #6
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    salut,

    Pour répondre à ta précédente question, la syntaxe utilisée à quelques avantages, dont deux intéressantes qui sont de délimiter l'expression et la possibilité d'y inclure des métacaractères sans la nécessiter de les échapper. Après que la variable contient ou non des guillemets, ça n'a pas d'importance, le tout est d'en tenir compte au moment de son utilisation.

    Pour ton second message, tu peux éventuellement essayer en enlevant les crochets, si tu as toujours l'erreur, alors elle est propre à "sql server", dans ce cas tu auras plus de chance d'avoir une réponse adéquate dans le forum correspondant -> http://www.developpez.net/forums/f49...ms-sql-server/

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    En fait, je ne penses pas que ça vienne de SQL Server car quand je teste directement le code sans utiliser les variables mais directement les paramètres "en dur" dans un invité de commande , cela fonctionne ; du coup c'est bien l'histoire des " que l'invité de commande ne discerne pas.
    J'ai essayé sans les crochets, mais toujours pareil ...

  8. #8
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Dans une invite de commande "cmd" ou "sqlcmd" ? Qu'est ce que tu tapes exactement ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Voici ce que je tape exactement dans un invité de commande cmd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlcmd -S IFPU000 -d ICS -U linea -P lineas -Q "select * from tableok" -s"," -o "C:\Documents and Settings\Test_Export.csv"
    En faisant "entrer" j'ai bien le fichier Test_Export.csv qui se créé avec le bon contenu;

  10. #10
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    On va faire un script de test simple qui, une fois lancé, va générer un script "tmp.cmd" contenant exactement ta ligne de commande et sur lequel il te faudra cliquer...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @echo off
    set "server=IFPU000"
    set "dataBaseName=ICS"
    set "login=linea"
    set "passWord=lineas"
    set "tableName=tableok"
    set "csvFile=C:\Documents and Settings\Test_Export.csv"
    
    move /y "%csvFile%" "%csvFile%.bak">nul 2>&1
    echo sqlcmd -S %server% -d %dataBaseName% -U %login% -P %passWord% -Q "select * from %tableName%" -s"," -o "%csvFile%">tmp.cmd
    echo.
    echo cliquez sur tmp.cmd ...
    echo.
    pause

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Merci pou ce script ça marche bien
    Mais ça n'a pas résolu le problème initial avec les variables et les guillemets;..
    Je vais encore continuer a chercher avec l'aide du script que tu m'as donné

  12. #12
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Tu conviens que le script généré est identique en tous points à ce que tu tapes sur ta ligne de commande ?

Discussions similaires

  1. [Batch] Problème condition sur variable et chaine de caractères
    Par Omote dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 10/10/2010, 04h37
  2. [SQL] Problème d'affichage de caractère spéciaux dans une variable chaîne
    Par Kryptonaute dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/08/2006, 08h40
  3. Réponses: 6
    Dernier message: 28/05/2004, 09h39
  4. Problème de chaîne de caractères (BSTR)
    Par patvdb dans le forum MFC
    Réponses: 2
    Dernier message: 26/02/2004, 15h44
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

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