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 :

EXEC master xp_cmdshell


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut EXEC master xp_cmdshell
    Bonjour à tous,

    Mon code est:

    select @object_extract = dbo.Jeeves_FN_ExtractString(@liste_object,',',@compt_objects)
    SELECT @definition = definition
    FROM sys.sql_modules
    JOIN sys.objects
    ON sys.sql_modules.object_id = sys.objects.object_id
    where sys.objects.name =@object_extract

    SET @cmd = 'echo '+ @definition + '>> '+@path+'\ObjectsCreated\a.sql'
    SET @requete ='EXEC master..xp_cmdshell '''+@cmd+''''
    exec(@requete)
    normalement j'aurai comme output les code des objets de type @object_extract,
    Or j ai comme resultat que create nom_procedure
    voici un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE procedure g_test
    merci de m'aider pour resoudre mon probleme

  2. #2
    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 : 44
    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,

    Vous n'avez que la première ligne parce que le code de la procédure stockée contient les retours à la ligne.
    Or quand vous faites appel à la procédure stockée système étendue xp_cmdshell, vous exécutez une commande DOS : dès que l'interpréteur de commandes DOS rencontre un retour chariot, il exécute la commande.

    Avec la commande ECHO, vous ne pouvez pas dépasser 255 caractères, et il n'est pas rare d'avoir des procédures plus longues que 255 caractères

    C'est dommage d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET @requete ='EXEC master..xp_cmdshell '''+@cmd+''''
    exec(@requete)
    Alors que pouvez faire directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC master.dbo.xp_cmdshell @cmd, NO_OUTPUT
    Si donc vous souhaitez exporter le code de votre procédure stockée, voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT SQL.definition + CHAR(10) + CHAR(13) + 'GO' toto
    INTO ##TOTO
    FROM sys.procedures PROCS
    JOIN sys.sql_modules SQL ON SQL.object_id = PROCS.object_id
    WHERE PROCS.name NOT LIKE 'dt%'
    AND PROCS.name NOT LIKE 'sp%'
    ORDER BY PROCS.name
     
    DECLARE @BCP VARCHAR(256);
    SET @BCP = 'bcp "SELECT * FROM ##TOTO" queryout C:\Procs.sql -T -c';
    EXEC xp_cmdshell @BCP;
     
    DROP TABLE ##TOTO;
    Il a le désavantage d'utiliser une table temporaire globale, en revanche cela s'exécute très vite et exporte le code complet

    @++

  3. #3
    Membre très actif
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut
    Bonjour a tous,

    Merci beaucoup Elsuket,
    ton code est tres important..ce que je cherche..
    mais j ' ai pas compris l'utilité de

    * CHAR(10) + CHAR(13)
    *PROCS.name NOT LIKE 'dt%'

    Merci d'avance

  4. #4
    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 : 44
    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,

    La documentation est votre première amie !
    Profitez-en elle est bien faite.

    Donc CHAR(10) = Saut de ligne et CHAR(13) = Retour chariot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PROCS.name NOT LIKE 'dt%'
    Il est possible que si vous testez cette commande seule cela ne vous retourne rien, mais c'est le cas si vous (ou quelqu'un d'autre) avez utilisé l'utilitaire DTA pour faire des tests de charge et du paramétrage de base de données.

    @++

Discussions similaires

  1. SET NOCOUNT sans effet avec exec master..xp_fileexist
    Par droog dans le forum Développement
    Réponses: 13
    Dernier message: 16/06/2011, 09h56
  2. envoi mail exec master.dbo.xp_smp_send_mail
    Par xouzi dans le forum Développement
    Réponses: 7
    Dernier message: 19/04/2011, 10h06
  3. erreur exec xp_cmdshell
    Par haykelFST dans le forum Développement
    Réponses: 1
    Dernier message: 28/11/2008, 12h11
  4. Comment utiliser Site Exec sous FTP
    Par phig dans le forum Développement
    Réponses: 2
    Dernier message: 12/08/2003, 17h11
  5. [POSTGRESQL] exec function
    Par peuh dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/05/2003, 15h15

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