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 :

Gestion de fichiers.txt en Transact-SQL


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur IT - SAP
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur IT - SAP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut Gestion de fichiers.txt en Transact-SQL
    Bonjour,

    Voilà j'ai un petit problème avec une procédure stockée.
    Je veux creer une procédure stockée qui doit récupérer un fichier.txt puis le lire afin de mettre à jour la base de données.
    Mais je vois pas du tout comment faire pour récupérer et lire un fichier.txt en Transact-SQL.
    Je pensai pas que c'était faisable mais on ma soutenu et assuré que si.
    Alors si quelqu'un sait comment faire, je suis preneur.
    Merci d'avance...

    ShaGa

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    La méthode la plus employée est d'utiliser l'instruction BULK INSERT vers une table de traitement qui peut être une table temporaire locale. Ensuite, tu peux effectuer toutes tes instructions sur la table tempraire afin de mettre à jour ta table.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur IT - SAP
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur IT - SAP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    Ok merci, je vais me renseigner sur cette solution, mais c'est apparement bien ce que je recherche.
    Par contre, débutant en SQL serveur, je voi pas encore trop comment faire ça, connaitrai tu bon tutoriel sur l'utilisation de cette instruction ?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    Je pense que tu trouveras toutes les informations nécessaires dans l'aide SQL Server.

    Tout d'abord, je te conseillerai d'appréhender la commande BULK INSERT qui est une commande T-SQL. Puis ensuite de travailler sur les tables temporaires. Il te faudra simplement terminer par compiler les deux concepts dans une procédure stockée.

    Concernant les tutoriels sur ce site, il y en a de très bon. Sinon si tu n'as pas trop de soucis avec l'anglais, je te conseillerai d'aller sur le site databasejournal.com

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur IT - SAP
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur IT - SAP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    Ok, merci beaucoup, je vais m'atteler a étudier tout ça.
    ++

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur IT - SAP
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur IT - SAP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    Délolé de revenir la dessus, mais je me demandai en quoi une (ou plusieurs) table temporaire me serai utile ? En effet, pourquoi ne pas remplir directement les tables de ma base de données plutôt que de passer par des tables temporaires ?

  7. #7
    Membre expérimenté
    Inscrit en
    Février 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 185
    Par défaut
    Salut,

    Si tu n'as pas besoin de faire de traitement sur les données inserées tu peux t'en passer, sinon le mieux serait de faire le bulk insert sur des tables temporaires, de faire les traitements et d'ajouter ou de modifier les données vers les tables concernées.

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur IT - SAP
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur IT - SAP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    Oui je viens de voir ça, merci.

    Par contre maintenant j'ai un autre problème, celui la à l'exécution de mon bulk insert. Il m'affiche ce message d'erreur :

    Serveur : Msg 4863, Niveau 16, État 1, Ligne 1
    Erreur de conversion de données à insérer en bloc (troncature) pour la ligne 1, colonne 2 (exp_code).
    Serveur : Msg 4863, Niveau 16, État 1, Ligne 1
    Erreur de conversion de données à insérer en bloc (troncature) pour la ligne 2, colonne 2 (exp_code).
    Serveur : Msg 4863, Niveau 16, État 1, Ligne 1
    Erreur de conversion de données à insérer en bloc (troncature) pour la ligne 3, colonne 2 (exp_code).
    Serveur : Msg 4863, Niveau 16, État 1, Ligne 1
    Erreur de conversion de données à insérer en bloc (troncature) pour la ligne 4, colonne 2 (exp_code).
    Serveur : Msg 4863, Niveau 16, État 1, Ligne 1
    Erreur de conversion de données à insérer en bloc (troncature) pour la ligne 5, colonne 2 (exp_code).

    (0 ligne(s) affectée(s))


    (0 ligne(s) affectée(s))



    Et du coup, bah ça marche pas (normal).

    Quelqu'un sait d'ou ça pourrai venir ?

    Pour informations, voici une partie de ma procédure :

    CREATE TABLE #temporaire(mis_num varchar(10),
    exp_code varchar(3),
    exp_nom varchar(20),
    exp_prenom varchar(20),
    soc_nom varchar(20),
    soc_prenom varchar(20),
    veh_immat varchar(9),
    veh_marque varchar(20),
    veh_modele varchar(20),
    gge_code varchar(5),
    gge_nom varchar(30));

    bulk insert dbo.#temporaire FROM 'c:\test.txt' with (FIELDTERMINATOR = '''', FIRSTROW = 1, ROWTERMINATOR = '\n');
    Et voici le contenu de mon fichier "test.txt" (créé pour l'occasion) :

    '2007009825' 'AF' 'AAAAAA' 'kkkkkkkkkk' 'FFFFF' 'pppppppp' '1254MP47' 'RENAULT' 'Twingo' 'COUL' 'Carrosserie C'
    '2007009826' 'LP' 'BBBBBBB' 'llllllll' 'GGGGG' 'qqqq' '5863LR82' 'FIAT' 'Punto' 'MA' 'Carrosserie M'
    '2007009827' 'GM' 'CCCC' 'mmmm' 'HHHHH' 'rrrrrr' '7841PC66' 'RENAULT' 'Twingo' 'COUL' 'Carrosserie C'
    '2007009828' 'TM' 'DDD' 'nnnnnn' 'IIIIIII' 'ssssss' '1265NB82' 'RENAULT' 'CLIO I' 'MO' 'Carrosserie M'
    '2007009829' 'ED' 'EEEEEEEEE' 'ooooooo' 'JJJJJJJJ' 'ttttttt' '4568MC82' 'PEUGEOT' '306' 'TGA' 'Carrosserie T'

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    Je pense que dans ton fichier un de tes colonnes doit avoir une taille supérieur à la colonne qui doit l'acceuillir. Du coup, si tu n'as pas de troncature automatique sa plante le bulk insert.

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur IT - SAP
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur IT - SAP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    Bah c'est ce que je pensai aussi, mais même en mettant des varchar(50) partout, il me fait la même erreur. A la seule différence qu'au lieu d'avoir le problème à la colonne 2, je l'ai à la colonne 11.

    Sur le site de microsoft, il explique bien que cela vient du fait que la source est plus grande que la destination, mais en l'occurrence, là je voi pas en quoi elle est plus longue. J'ai même réduit au maximum le tuple dans le fichier texte (moins de 10 caractères pour le nom du garage), mais cela na rien changer.

    En revanche, j'ai essayer de changer les noms de garage, dans le fichier texte, et il fait plus que des erreurs sur 3 lignes.

    Pour information, j'utilise SQL-Server 2000, quelqu'un connaitrai-t-il l'existance d'un bug ou autre sur cette version ? Parce que je trouve que ça y ressemble !

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur IT - SAP
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur IT - SAP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    Sinon comment je pourrai faire une troncature automatique, ça pourrai peut être résoudre on problème non ?

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur IT - SAP
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur IT - SAP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    Bon ça y est, j'ai trouver d'ou viens l'erreur !!!
    Par contre je ne vois pas du tout pourquoi ça fait ça.

    Je m'explique :
    En fait, mon bulk insert affecte toute les colonnes normalement, sauf la dernière.
    En effet, dans la dernière colonne (gg_nom), il me copie l'intégralité de la ligne.

    Par contre je voi pas du tout pourquoi il me fait ça

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur IT - SAP
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur IT - SAP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    Bon ça y est, l'origine du problème est trouvée !!! \o/

    Je l'explique, celà pourrai éviter à d'autres de passer un week-end à se croquer le cerveau

    En fait le FIELDTERMINATOR n'indique à la commande bulk insert que la séparation des champs. Autrement dit un FIELDTERMINATOR = '''' indique que dans le fichier.txt, les champs sont SEPARER par des ' et non entouré par des '.
    C'est bête mais c'est comme ça.

    Après comment faire pour lui expliquer le contraire, je ne sait pas, mais bon j'y arrive comme ça c'est déjà pas mal.

    Merci a tous pour votre aide. A++

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

Discussions similaires

  1. Importation fichier txt dans table SQL server
    Par vito30620 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/09/2013, 07h41
  2. creation de fichier txt en pl/sql
    Par jejam dans le forum PL/SQL
    Réponses: 14
    Dernier message: 26/10/2010, 17h48
  3. copie d´un fichier txt vers MS SQL Server
    Par makohsarah dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/10/2010, 17h26
  4. Ouvrir et écrire dans un fichier .txt en T-SQL
    Par joul's dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 27/10/2008, 21h04
  5. import fichier Txt avec du SQL
    Par bouba_95 dans le forum Access
    Réponses: 1
    Dernier message: 19/01/2007, 21h44

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