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 :

Extraire le résultat dans un fichier


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut Extraire le résultat dans un fichier
    Bonjour,

    Je travaille sous SQL Server 2000.
    Je souhaiterais extraire le résultat d'une requête dans un fichier texte pour ensuite lancer cette requete quotidiennement à une heure précise.

    Le fichier de sortie pourrait-être un .txt ou mieux un .csv avec un semicolon comme séparateur.

    Voici ma requête actuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      SELECT *
        FROM T_STATISTICS
       WHERE EntryDate BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) - 1, 0)
                           AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())    , 0)
    ORDER BY EntryDate ASC
    Merci de votre aide.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Vous pouvez plannifier un job windows qui lance une commande bcp.

    Dans votre cas, quelque chose comme :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bcp "SELECT * FROM T_STATISTICS WHERE (EntryDate BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) - 1, 0) AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)) ORDER BY EntryDate" queryout Monfichier.csv -T -c -t ;

  3. #3
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut
    Bonjour,

    Merci de votre rapidité, mais je le job tourne en boucle.
    J'ai crée un .bat dans lequel j'ai inséré le code que vous me suggérez.

    La commande défile en boucle dans la fenetre CMD

    Si j'esssaie de lancer cette commande directement dans la fenetre CMD (sans passer par un .bat), voici ce que j'obtiens :
    Nom : bcp.jpg
Affichages : 222
Taille : 43,8 Ko

    Merci de votre aide,

  4. #4
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut
    En bidouillant un peu j'ai trouvé mon erreur, il fallait des doubles quotes au lieu de simples quotes pour la query.
    Par contre j'ai toujours un message d'erreur :
    Nom : bcp.jpg
Affichages : 139
Taille : 30,2 Ko

    Merci de votre aide

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    mettez des doubles quotes pour la requete

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    il ne trouve pas la table, donnez lui un coup de main, en précisant la BDD et le schéma :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT ...
    FROM Base.Schéma.Table

  7. #7
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut
    Je suis désolée je débute en SQL, qu'entendez-vous par schéma ?
    Entre-temps, j'ai modifié la syntaxe, voilà ce que cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bcp "SELECT * FROM T_STATISTICS WHERE (EntryDate BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) - 1, 0) AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)) ORDER BY EntryDate" queryout c:\Monfichier.csv  -c -t -S VTB\VTB -U sa -P *****;
    Malgré cela, j'obtiens toujours :
    Ce serveur SQL n'existe pas ou son accès est refusé "
    Help me please !

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par lanainejulie Voir le message
    Je suis désolée je débute en SQL, qu'entendez-vous par schéma ?
    rapidement, les schéma permettent de "découper" votre base en sous-ensemble logiques, par exemple en fonction des domaines d'application.
    Par exemple, dans une BDD, vous pouvez avoir une schéma poru toutes les tables qui concernent les compta, un autre pour tout ce qui concerne la production,...

    Mais vue votre réponse, je pense qu'il s'agit dans votre cas du schéma par défaut, à savoir "dbo"

    reste à savoir le nom de votre BDD.

    BDD.dbo.LaTable


    Entre-temps, j'ai modifié la syntaxe, voilà ce que cela donne :

    bcp "SELECT * FROM T_STATISTICS WHERE (EntryDate BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) - 1, 0) AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)) ORDER BY EntryDate" queryout c:\Monfichier.csv -c -t -S VTB\VTB -U sa -P *****;

    Malgré cela, j'obtiens toujours :
    Ce serveur SQL n'existe pas ou son accès est refusé "

    Help me please !
    1/ Quel est le nom de votre serveur ?
    2/ le ";" doit suivre l'option "-t" qui indique le séparateur de champs dans votre CSV (sinon par défaut c'est une tabulation)
    3/ si votre mot de passe contient des caracteres spéciaux, mettez le entre guillemets


    En supposant que le nom de votre serveur de BDD soit VTB, et que votre base de donnée soit également VTB, ca donerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bcp "SELECT * FROM VTB.dbo.T_STATISTICS WHERE (EntryDate BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) - 1, 0) AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)) ORDER BY EntryDate" queryout c:\Monfichier.csv  -c -t ; -S VTB -U sa -P "*****"
    (vous pouvez aussi spécifier le nom de la base de données avec l'option -d )

  9. #9
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut
    Impeccable, merci beaucoup en utilisant cette commande tout fonctionne
    Une dernière petite question, comment faire pour que l'entête des colonnes soient également exportée ??

    De plus, lors que j'essaie de lancer ce travail via un batch, le fichier tourne en boucle et aucun fichier n'est généré.
    Est-il possible de lancer la commande bcp de manière automatique ??? Je souhaiterais que cette extraction soit faite tous les jours.


    Merci

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par lanainejulie Voir le message
    Une dernière petite question,
    Dommage que ce n'etait pas la première, car bcp ne le permet pas nativement

    Il y a donc deux solutions :
    1/utiliser autre chose que bcp (genre osql)
    2/inclure les noms de colonnes dans votre requete, avec un union all. Mais dans ce cas il faut caster toutes vos colonnes en varchar

    donc votre requete ressemblerait a :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT 
        'NomCol1',
        'NomCol2'
    UNION ALL
    SELECT 
        CAST(UneColonne AS VARCHAR(n)),
        CAST(UneAutreColonne AS VARCHAR(n))
    FROM 
        --le reste de votre requete

    Pourquoi voulez vous inclure les noms de colonne ? Le csv ne sera-t-il pas par la suite traité automatiquement ?

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/06/2007, 21h59
  2. Réponses: 7
    Dernier message: 06/02/2007, 14h27
  3. script sp_spaceused + résultat dans un fichier plat
    Par bayfalle dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 21/12/2006, 17h33
  4. Extraire des données dans un fichier .csv
    Par orj30754 dans le forum C
    Réponses: 7
    Dernier message: 03/11/2006, 15h48
  5. rechercher et extraire deux chaines dans un fichier
    Par piotr dans le forum Langage
    Réponses: 16
    Dernier message: 13/07/2006, 16h07

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