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 :

BULK INSERT et nombre de colonnes variable


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Août 2006
    Messages : 78
    Points : 49
    Points
    49
    Par défaut BULK INSERT et nombre de colonnes variable
    Bonjour,

    Je suis en train de configurer l'importation de fichiers textes par le biais de BULK INSERT.

    Je suis confronté à 2 problèmes :

    -Avant et après mon tableau se trouvent des lignes avec un seul champ, voire des lignes vides
    -Au sein même de mon tableau, il peut y avoir de 4 à 8 champs. Mais cela varie dans un même tableau.

    Je n'arrive pas à m'en sortir. Si j'enlève les lignes superflues, il y a toujours le problème du nombre de champs. Si je les laisse, je ne me retrouve qu'avec une seule ligne qui contient tout le fichier.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BULK INSERT "test" FROM [d:\test.txt] WITH (FIELDTERMINATOR ='\t', ROWTERMINATOR ='\n')
    Et mon fichier ressemble à ça :

    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
    $DATE_FIN=22/02/2007
    $HEURE_FIN=11:00:56
    
    $TITRE1:
    #COL1  COL2  COL3    COL4
    66385	A	342466	OBS1
    66385	F	687864	OBS1
    66391	V	168375	OBS2	OBS3
    66391	J	 687654	OBS2	 OBS3    OBS4
    66400	T	684143	OBS2
    66400	T	179493
    66403	T	138766	OBS1
    66403	O	745665	OBS1
    
    $TITRE2:
    #COL1  COL2	COL3
    
    $FIN
    La partie que je souhaite récupérer est en bleu. Jusqu'ici je me servais de l'importation access qui me permettait d'importer la totalité du fichier proprement.

    Y a t'il un paramètre à rajouter pour ça ?

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 888
    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 888
    Points : 53 121
    Points
    53 121
    Billets dans le blog
    6
    Par défaut
    Les bases de donnes etant relationnelle, il n'est pas possible de considerer des colonnes en nombre fluctuant.
    Si en revanche il y a bien n colonnes dont certaines ne sont pas remplies, ce ne sera pas un probleme.
    Dans le cas contraire prevoyez d'utiliser un fichier de format et considerez le fin comme une seule colonne, faite le bulk insert dans une table tampon et traitez le probleme avec une requete.
    Enfin, vous pouvez commencer l'insert a n'importe quelle ligne avec FIRST_ROW et le terminer a n'importe quelle ligne avec LAST_ROW.

    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BULK INSERT "test" 
    FROM 'd:\test.txt'
    WITH FIELDTERMINATOR ='\t', 
         ROWTERMINATOR='\n',
         FIRSTROW = 6,
         LASTROW = 10
    (desole je suis deplacement chez MS a Redmomd et n'ai pas access a un SQL Server pour verifier la syntaxe !)

    A +

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Août 2006
    Messages : 78
    Points : 49
    Points
    49
    Par défaut
    Alors il se trouve en effet que les colonnes vides sont inexistantes dans mon fichier texte, c'est à dire qu'il n'y a pas de tabulation, d'où le problème.
    Quant aux arguments FIRSTROW et LASTROW, à chaque fois que je m'en sers, il n'y a aucune donnée d'importée.

    En ce qui concerne le fichier de format, je ne vois pas comment le rédiger pour résoudre mon problème.
    Ce qui est bizarre, c'est que ça marchait très bien avec l'assistant d'importation d'Access qui, lui, me considérait bien les colonnes inexistantes comme des valeurs nulles...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Août 2006
    Messages : 78
    Points : 49
    Points
    49
    Par défaut
    Je progresse !!

    Je parviens quasiment à tout importer sur une seule colonne.
    Quasiment...mais pas totalement.
    En fait il faut que j'ouvre mon fichier (avec WordPad par exemple) et que je l'enregistre. Et là ça marche... sinon j'ai le message :

    Msg 4863, Niveau 16, État 1, Ligne 3
    Erreur de conversion des données à charger en bloc (troncation) pour la ligne 1, colonne 1 (Champ1).


    Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    BULK INSERT test
    FROM "d:\test.txt"
    WITH (FIELDTERMINATOR = '\t',
             ROWTERMINATOR = '\n')
    Ma table contient une seule colonne varchar(255) NULL et vide bien entendu.

    Problème de format du fichier txt ?

    edit: quand je l'ouvre avec le bloc notes sans l'avoir enregistré, les données sont affichées en lignes car les délimiteurs ne sont pas reconnus

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 888
    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 888
    Points : 53 121
    Points
    53 121
    Billets dans le blog
    6
    Par défaut
    très vraisemeblablement !

    A +

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Août 2006
    Messages : 78
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par SQLpro
    faite le bulk insert dans une table tampon et traitez le probleme avec une requete.
    L'importation brute sur une colonne est maintenant terminée. J'ai ensuite supprimer les lignes superflues avec un recordset. Il me reste donc, dans une seul colonne et avec des carrés à la place des espaces, cette table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Champ1
    "65904 A 687684 OBS1"
    "65904 B 156877 OBS2"
    "66075 A 247418 OBS1"
    .....
    .....
    .....
    "66075 A 3546464 OBS1"
    "66078 A 687684 OBS2"
    "66078 C 354687 OBS2 OBS3"
    Je ne vois pas quelle fonction utiliser pour séparer chaque donnée dans des colonnes avec le moins de calculs possible.

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Nombre de colonnes variable avec SQL Server 2005
    Bonjour je souhaiterais une aide pour afficher dans un tableau les notes de chaque étudiant pour chaque épreuves (matières) selon une filière où les étudiants constitueraient les lignes et comme colonnes on aura les épreuves avec la note correspondante juste en-dessous . En clair voilà ce que je souhaiterais obtenir comme résultat:

    si Filière = X

    Id ===== Nom & Prénom ===== Anglais ===== Français ===== Math
    1 ===== Jean Fernandès===== 10 ===== 14 ===== 9
    2 ===== Adil Ramosora ===== 8 ===== 11 ===== 16
    3 ===== Gil Simon ===== 12 ===== 14 ===== 13

    ou si Filière = y

    Id ==== Nom & Prénom ==== Info ==== Français ==== Math === Algo
    A1 ==== Alain Jean ==== 11 ==== 8 ==== 16 === 9
    RE2 ====Jerome Hach ==== 16 ==== 11 ==== 14 === 12
    SW3 ====Ba Ousmane ==== 8 ==== 11 ==== 7 === 5

    Les filières et les épreuves sont dans deux tables distinctes au sein de ma base de données.
    Aidez moi SVP!!!!!!!

Discussions similaires

  1. [BULK INSERT] import de certaines colonnes uniquement
    Par _Eric_ dans le forum Développement
    Réponses: 1
    Dernier message: 12/10/2008, 00h55
  2. Tableau avec un nombre de colonne variable
    Par HoB dans le forum VBScript
    Réponses: 12
    Dernier message: 17/01/2008, 11h06
  3. Affichage avec un nombre de colonnes variable
    Par sebaaas dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/10/2007, 19h53
  4. SELECT avec un nombre de colonnes variable
    Par sorcer1 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 24/09/2007, 21h58
  5. [Etat]Nombre de colonnes variables dans un état
    Par milou161185 dans le forum IHM
    Réponses: 15
    Dernier message: 27/03/2007, 16h39

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