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 :

Export BCP des données de longueur variable d'un table Sqlserver 2005


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Novembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Novembre 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut Export BCP des données de longueur variable d'un table Sqlserver 2005
    Bonjour,

    J'ai un petit soucis avec le BCP de ma table.

    Les informations (VARCHAR) sockées dans le champ de ma tables sont de longueur variables..

    Je n'arrive pas en faisant un BCP (car il faut que je le passe dans une procédure) à extraire les données de cette table dans un fichier texte.

    Voici le BCP :

    DECLARE @L_CURRENTDATE DATETIME
    DECLARE @L_OUT_PATH VARCHAR(100)
    DECLARE @L_OUT_FILENAME VARCHAR(100)
    DECLARE @QUERY NVARCHAR(4000)

    SET @L_CURRENTDATE = GETDATE()
    SET @L_OUT_PATH = '"D:\Imports\'
    SET @L_OUT_FILENAME = 'out.txt'

    SET @QUERY = '"SELECT * FROM DBO.CUST_TRACE_LOGS_SALARIES WHERE LOGS IS NOT NULL"'
    SET @QUERY = 'bcp "'+@QUERY+'" queryout '+@L_OUT_PATH+@L_OUT_FILENAME+'"-c -T'
    SET @QUERY = 'execute master.dbo.xp_cmdshell '+''''+@QUERY+''''
    EXECUTE SP_EXECUTESQL @QUERY,N'@L_CURRENTDATE DATETIME',@L_CURRENTDATE


    Et voici le message d'erreur :

    La direction de la copie doit être « in », « out » ou « format ».
    utilisation : bcp {dbtable | query} {in | out | queryout | format} fichier_données
    [-m errs max] [-f format fich.] [-e fichier err]
    [-F prem ligne] [-L dern ligne] [-b taille lot]
    [-n type orig] [-c type caract] [-w type caract larg]
    [-N conserv car nontexte orig] [-Version de format de fichier V] [-q identif entre guillem]
    [-C spécif page de code] [-t indic fin champ] [-r indic fin ligne]
    [-i fich entrée] [-o fich sortie] [-a taille paquet]
    [-S nom serveur] [-U nom utilisateur] [-P mot passe]
    [-T connexion approuvée] [-v version] [-R régional activé]
    [-k conserv valrs nulles] [-E conserv valrs identité]
    [-h "conseils chargmnt"]
    NULL



    D'avance merci pour votre aide

  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 : 43
    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,

    Voici la commande que vous tentez d'exécuter :

    execute master.dbo.xp_cmdshell 'bcp ""SELECT * FROM DBO.CUST_TRACE_LOGS_SALARIES WHERE LOGS IS NOT NULL"" queryout "D:\Imports\out.txt"-c -T'
    Il y a des guillemets en trop, qui empêchent l'interpréteur de commandes de l'utilitaire BCP de trouver votre option queryout.

    Vous pouvez donc écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DECLARE @L_CURRENTDATE DATETIME
    DECLARE @L_OUT_PATH VARCHAR(100)
    DECLARE @L_OUT_FILENAME VARCHAR(100)
    DECLARE @QUERY NVARCHAR(4000)
     
    SET @L_CURRENTDATE = GETDATE()
    SET @L_OUT_PATH = 'D:\Imports\'
    SET @L_OUT_FILENAME = 'out.txt'
     
    SET @QUERY = '"SELECT * FROM DBO.CUST_TRACE_LOGS_SALARIES WHERE LOGS IS NOT NULL"'
    SET @QUERY = 'bcp '+@QUERY+' queryout ' + @L_OUT_PATH + @L_OUT_FILENAME + ' -c -T'
    SET @QUERY = 'execute master.dbo.xp_cmdshell '+''''+@QUERY+''''
    PRINT @QUERY
    EXECUTE master.dbo.sp_executesql @QUERY,N'@L_CURRENTDATE DATETIME',@L_CURRENTDATE
    @++

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Novembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Novembre 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Merci,

    Mais voilà mon nouveau message d'erreur !

    Pourtant la table existe bien !

    SQLState = S0002, NativeError = 208
    Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Nom d'objet 'dbo.CUST_TRACE_LOGS_SALARIES' non valide.
    SQLState = 37000, NativeError = 8180
    Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Impossible de préparer les instructions.
    NULL

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 864
    Points : 53 018
    Points
    53 018
    Billets dans le blog
    6
    Par défaut
    Il faut que vous précisiez dans quelle base se trouve votre table. Soit en préfixant le schéma, soit en utilisant le commutateur -d.

    A +

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Novembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Novembre 2007
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Ca focntionne !!

    Voici la requette :

    DECLARE @L_CURRENTDATE DATETIME
    DECLARE @L_OUT_PATH VARCHAR(100)
    DECLARE @L_OUT_FILENAME VARCHAR(100)
    --DECLARE @L_VNAMETABLE varchar(100)
    DECLARE @QUERY NVARCHAR(4000)


    SET @L_CURRENTDATE = GETDATE()
    --SET @L_VNAMETABLE = 'dbo.CUST_TRACE_LOGS_SALARIES'
    SET @L_OUT_PATH = 'D:\Imports\logs\'
    SET @L_OUT_FILENAME = 'Logs_Imports_SoldesCP.txt'


    SET @QUERY = '"SELECT * FROM effnet..CUST_TRACE_LOGS_SOLDECP "' --WHERE LOGS IS NOT NULL"'
    SET @QUERY = 'bcp '+@QUERY+' queryout ' + @L_OUT_PATH + @L_OUT_FILENAME + ' -c -T'
    SET @QUERY = 'execute master.dbo.xp_cmdshell '+''''+@QUERY+''''
    PRINT @QUERY
    EXECUTE master.dbo.sp_executesql @QUERY,N'@L_CURRENTDATE DATETIME',@L_CURRENTDATE

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/06/2008, 20h07
  2. Export / import des données de Jasper Serveur
    Par meurwinn dans le forum Jasper
    Réponses: 8
    Dernier message: 28/03/2008, 12h45
  3. [SQL2005] pousser des données dans une variable
    Par Monnier Eric dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/03/2008, 16h05
  4. Réponses: 1
    Dernier message: 20/11/2007, 15h12
  5. [3D] Export/Import des données graphics
    Par mister3957 dans le forum Développement 2D, 3D et Jeux
    Réponses: 13
    Dernier message: 03/02/2006, 16h49

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