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

Développement SQL Server Discussion :

Longueur de la commande postée par cmdshell


Sujet :

Développement SQL Server

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Par défaut Longueur de la commande postée par cmdshell
    Bonjour,

    J'ai besoin de générer un fichier .bat via une procédure stockée de SQL Serveur.
    Pour des raisons de droits nous avons choisi de ne pas utiliser un FileSystemObject et nous avons opté pour le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	SET @LC_Commande = @CC_Prgxxx + ' '
    SET @LC_Commande = @LC_Commande + 'xxx'
    SET @LC_Commande = @LC_Commande + 'yyy'
    SET @LC_LigneBatch = 'echo ' + @LC_Commande + '>> ' + @LC_NomBatch
    EXEC master..xp_cmdshell @LC_LigneBatch, no_output
    Cela fonctionne très bien.
    Le problème survient à un moment où la chaîne que je veux écrire avoisine les 300 caractères de long.
    Là SQL Serveur ne l'écrit pas

    J'avais pensé à une limitation au niveau de la commande ECHO mais, au retour que j'ai d'une autre forum, cela ne viendrait pas de là.

    Merci d'avance de vos conseils

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 199
    Billets dans le blog
    1
    Par défaut
    Ça peut être dû à plein de choses.

    Peut-on avoir un exemple de chaîne qui passe et de chaîne qui passe pas ?

    Autant en SQL qu'en Batch il y a plein de caractères et mots réservés : peut-être tombez-vous simplement sur un tel cas ?

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Par défaut
    Merci pour le retour.

    C'est difficile de mettre la chaine sur le forum parce que certains paramètres contiennent des données propres au client.
    Par contre j'ai fait le test suivant qui me confirme que c'est plus un problème de longueur de chaine que de contenu :

    Si je passe le code suivant cela ne s'écrit pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET @LC_LigneBatch = 'echo ' + @LC_Commande + '>> ' + @LC_NomBatch
    EXEC master..xp_cmdshell @LC_LigneBatch, no_output
    Si je raccourcis la chaine de commande cela passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET @LC_Commande = Substring(@LC_Commande, 1, 220)
    SET @LC_LigneBatch = 'echo ' + @LC_Commande + '>> ' + @LC_NomBatch
    EXEC master..xp_cmdshell @LC_LigneBatch, no_output
    Si je remets des lettres au bout de ma chaine de commande, je suis certain qu'elle ne contient pas de caractères ou de mots interdits mais elle redevient trop longue là ça replante !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SET @LC_Commande = Substring(@LC_Commande, 1, 220)
    SET @LC_Commande = @LC_Commande + replicate('x', 20)
    SET @LC_LigneBatch = 'echo ' + @LC_Commande + '>> ' + @LC_NomBatch
    EXEC master..xp_cmdshell @LC_LigneBatch, no_output
    Hier, avant de poster, j'avais essayé de mettre des Replace pour enlever tous les caractères spéciaux (%, /, côtes, etc.)

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Par défaut
    Franchement il y a des jours où je dépasse les limites permises de la stupidité.

    En haut de mon code la déclaration des variables était la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	DECLARE @LC_Commande		NVARCHAR(255)
    	DECLARE @LC_LigneBatch		NVARCHAR(255)
    J'ai remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	DECLARE @LC_Commande		NVARCHAR(1000)
    	DECLARE @LC_LigneBatch		NVARCHAR(1000)
    Là je n'ai plus d'erreur.

    Désolé vraiment.
    Et merci encore.

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 199
    Billets dans le blog
    1
    Par défaut
    Arf, j'allais justement demander comment était déclarée la variable

    En tout cas, la limite est de 8000 (ou 4000 si unicode)

    https://msdn.microsoft.com/fr-fr/library/ms175046.aspx

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

Discussions similaires

  1. [HTML] Longueur maximum d'un champs par POST
    Par papyphp dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 01/09/2005, 15h24
  2. [HTTP] Comment utiliser les POST par programation
    Par Popof dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 31/01/2005, 09h14
  3. [Débutant(e)] Ou trouver la commande lancée par eclipse
    Par Emdis dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 25/11/2004, 11h00
  4. [XML] comment récupérer un arbre xml posté par http ?
    Par tomperso dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 02/07/2004, 10h29

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