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 :

Executer un Bat de transfert depuis une procédure stockée


Sujet :

MS SQL Server

  1. #1
    Membre confirmé

    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
    Points : 619
    Points
    619
    Par défaut Executer un Bat de transfert depuis une procédure stockée
    J'ai une procédure stockée qui génère un fichier ASCII et ce fichier doit ensuite être transféré via FTP vers le serveur d'un client.

    Pas de problème pour la génération mais c'est le transfert qui pose souci.
    J'ai écrit un fichie Bat qui contient ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ftp -s: D:\Transfert.xxx
    et le fichier de commande Transfert.xxx qui contient ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    open ftp2.xxx.net 
    user
    pw
    put Fichier.txt
    quit
    Le .Bat fonctionne parfaitement si je l'utilise directement. Par contre dans la procédure stockée avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute ('xp_cmdshell ''D:\Transfert.bat')
    le transfert ne se fait pas et je ne vois pas quelle erreur il y a

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Regardez dans le journal d'événement si vous n'avez pas d'informations à ce sujet.

    ++

  3. #3
    Membre confirmé

    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
    Points : 619
    Points
    619
    Par défaut
    Cela ne me semble pas très explicite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    NULL
    C:\WIN2003\system32>ftp -s: D:\Transfert.xxx 
     
    Transfers files to and from a computer running an FTP server service 
    (sometimes called a daemon). Ftp can be used interactively. 
     
    FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-A] [-x:sendbuffer] [-r:recvbuffer] [-b:asyncbuffers] [-w:windowsize] [host] 
     
      -v              Suppresses display of remote server responses. 
      -n              Suppresses auto-login upon initial connection. 
      -i              Turns off interactive prompting during multiple file 
                      transfers. 
      -d              Enables debugging. 
      -g              Disables filename globbing (see GLOB command). 
      -s:filename     Specifies a text file containing FTP commands; the 
                      commands will automatically run after FTP starts. 
      -a              Use any local interface when binding data connection. 
      -A              login as anonymous. 
      -x:send sockbuf Overrides the default SO_SNDBUF size of 8192. 
      -r:recv sockbuf Overrides the default SO_RCVBUF size of 8192. 
      -b:async count  Overrides the default async count of 3 
      -w:buffer size  Overrides the default transfer buffer size of 65535. 
      host            Specifies the host name or IP address of the remote 
                      host to connect to. 
     
    Notes: 
      - mget and mput commands take y/n/q for yes/no/quit. 
      - Use Control-C to abort commands. 
    NULL
    et on a l'impression que le bat ne 'voit' pas le fichier de commande Transfert.xxx

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    La syntaxe de votre commande à l'intérieur de votre .bat n'est pas correct.
    Il ne doit pas y avoir d'espace entre l'option -s: et le nom de votre fichier.

    Essayez comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ftp -s:D:\Transfert.xxx
    ++

  5. #5
    Membre confirmé

    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
    Points : 619
    Points
    619
    Par défaut
    Je dois dire que à il commence à m'énerver gravement
    J'ai corrigé en retirant l'espace après la directive -s:
    Cette fois le .BAT va bien lire le fichier d'instructions mais j'ai l'imression qu'il ne se synchronise pas avec. Ce que je ne comprends pas c'est que manuellement cela fonctionne. C'est via SQL serveur que le plantage se fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ftp -s:D:\Transfert.xxx  
    Invalid command. 
    Invalid command. 
    Not connected. 
    open ftp2.xxx.net 
    user
    pw
    put Fichier.txt
    quit
    > ftp: connect :Connection timed out
    NULL

  6. #6
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Le problème vient peut-être du compte avec lequel s'exécute SQL Server qui est aussi celui avec lequel s'exécute la procédure stockée étendue xp_cmdshell.

    Pourquoi ne pas essayer avec un DTS ou un package SSIS ?
    La tâche FTP vous permet de faire cela très simplement

    @++

  7. #7
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ftp -s:D:\Transfert.xxx  
    Invalid command. 
    Invalid command.
    Apparemment le compte de service sqlserver n'a pas les droits pour exécuter la commande CMD. Pour le vérifier ouvrez une fenêtre avec ce compte de service (en utilisant la commande RUN AS ou clic droit et RUN AS ..)

    Comme le suggère Elsuket, une autre et bonne approche serait d'utiliser SSIS. Le composant FTP est relativement simple à utiliser.

    ++

  8. #8
    Membre confirmé

    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
    Points : 619
    Points
    619
    Par défaut
    D'abord merci de votre patience
    J'étais parti sur l'idée d'un BAT parce que on pouvait le générer ou le modifier via l'application.

    une autre et bonne approche serait d'utiliser SSIS. Le composant FTP est relativement simple à utiliser.
    Je suis prêt à faire l'essai mais je suis incapable de trouver un tutoriel dessus.

Discussions similaires

  1. Accès à un fichier depuis une procédure stockée
    Par greg75 dans le forum Sybase
    Réponses: 2
    Dernier message: 09/03/2007, 10h02
  2. Réponses: 27
    Dernier message: 08/03/2007, 16h09
  3. Création de fichier depuis une procédure stockée
    Par xavier ringoise dans le forum SQL
    Réponses: 2
    Dernier message: 07/03/2006, 09h45
  4. Envoyer un mail depuis une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2005, 11h51
  5. Réponses: 6
    Dernier message: 18/05/2005, 14h04

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