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

Développement SQL Server Discussion :

Import d'un fichier XML


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Import d'un fichier XML
    salut a vous
    Depuis une semaine je chercher a importer les données d'un fichiers XML vers une base de données.
    Mais sans succès, j'utilise SQL-SERVER et mon fichiers XML doit charger plusieurs tables.
    voici le requête que j'ai essayé mais sans succès:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    CREATE TABLE tmpXml (XmlCol XML)
    INSERT INTO tmpXml(XmlCol) 
    SELECT * FROM OPENROWSET(BULK 'C:\Users\chonko0\Desktop\File2.xml', SINGLE_BLOB) AS x
    declare @doc nvarchar(1000)
    select @doc = convert(nvarchar(1000), XmlCol) from tmpXml
    SELECT Customs_offfice_code, voyage_number, Date_of_departure, Date_of_arrival, Time_of_arrival, Total_number_of_packages, Total_number_of_containers, Total_gross_mass, Mode_of_transport_code, Identity_of_transporter, Nationality_of_transporter_code, Place_of_transporter,Registration_number_of_transport_code, Date_of_registration, Master_information, Date_of_last_discharge, Carrier_code, Carrier_name, Carrier_address1, Carrier_address2, Carrier_address3, Place_of_departure_code, Place_of_destination_code, Tonnage_net_weight, Tonnage_gross_weight
     
    FROM OPENXML(@doc, '\Manifeste/General_segment/General_segment_id/Total_segment/Transport_information/Carrier/Load_unjoad_place/Tonnage', 8) WITH 
    (
    Customs_offfice_code Nvarchar(50),
    voyage_number Nvarchar(50),
    Date_of_departure Datetime, 
    Date_of_arrival Datetime ,
    Time_of_arrival Datetime,
    Total_number_of_packages Nvarchar(50),
    Total_number_of_containers Nvarchar(50),
    Total_gross_mass Nvarchar(50),
    Mode_of_transport_code Nvarchar(50),
    Identity_of_transporter Nvarchar(50),
    Nationality_of_transporter_code Nvarchar(50),
    Place_of_transporter Nvarchar(50),
    Registration_number_of_transport_code Nvarchar(50),
    Date_of_registration Nvarchar(50),
    Master_information Nvarchar(50),
    Date_of_last_discharge Nvarchar(50),
    Carrier_code Nvarchar(50),
    Carrier_name Nvarchar(50),
    Carrier_address1 Nvarchar(50),
    Carrier_address2 Nvarchar(50),
    Carrier_address3 Nvarchar(50), 
    Carrier_address4 Nvarchar(50),
    Place_of_departure_code Nvarchar(50),
    Place_of_destination_code Nvarchar(50),
    Tonnage_net_weight Nvarchar(10),
    Tonnage_gross_weight Nvarchar(10)
    )
    declare @ficpath Nvarchar(2000)
    declare @vsql varchar(2000)
    select @vsql = 'INSERT INTO tmpXml(ColXml) SELECT * FROM OPENROWSET(BULK ''' + @ficPath + ''', SINGLE_BLOB) AS x'
    exec   (@vsql)
    Voici mon fichier XML


    Vos contributions seront les bienvenues.
    Cordialement.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 698
    Points : 586
    Points
    586
    Par défaut
    A première vue, a moins que le server sql soit local, "C:\Users\chonko0\Desktop\File2.xml" ne sera pas accessible.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Le fichier n'est pas accessible!!!

  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 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Effectivement ce chemin : C:\Users\chonko0\Desktop\File2.xml
    N'existe que pour vous ! Or comme vous n'êtes pas le serveur SQL et que le serveur SQL n'est pas non plus vous, ce chemin n'existe pas pour lui.

    Placez votre fichier dans un chemin direct accessible depuis un disque visible du serveur.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    je l'ai mis dans un disque accessible par le Server
    le message suivant s'affiche:

    Msg*9438, Niveau*16, État*1, Ligne*1
    XML parsing: line 1, character 7, text/xmldecl not at the beginning of input

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par MC BAO Voir le message
    je l'ai mis dans un disque accessible par le Server
    le message suivant s'afiche:

    Msg*9438, Niveau*16, État*1, Ligne*1
    XML parsing: line 1, character 7, text/xmldecl not at the beginning of input
    Donc le fichier a bien été lu et maintenant vous avez un problème dans l'XML du fichier qui est incorrect, à la ligne 1 et au caractère 7...
    Le début de votre fichier devrait être quelque chose comme ça :
    <?xml version="1.0" encoding="UTF-16"?>
    et non UTF-8

    Sur quelle version de SQL Server travaillez vous ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Sql Server 2008

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Beaucoup d'horreur dans votre code !!!

    1) vous devez déclarer un varchar(max) si vous n'êtes pas sûr du nombre de caractères du fichier
    2) XML est sensible à la casse ! C'est donc pas voyage_number mais Voyage_number
    3) offfice avec 3 f !!!! Non...
    4) vous devez placer le XML en mémoire (DOM) via la procédure sp_xml_preparedocument
    5) vous devez libérer le XML après utilisation via la procédure sp_xml_removedocument

    Il y a sans doute d'autres fautes !
    Après je sais pas ce que vous voulez faire...

    Le mieux serait quand même de vous former !!!!

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    DECLARE @doc varchar(max), @idoc INT;
     
    SELECT @doc = BulkColumn
    FROM   OPENROWSET(BULK 'C:\_DOWNLOADS_\File2.xml', SINGLE_BLOB) AS x;
     
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;  --> impératif
     
    SELECT Customs_office_code, Voyage_number, Date_of_departure, Date_of_arrival, Time_of_arrival, Total_number_of_packages, Total_number_of_containers, Total_gross_mass, Mode_of_transport_code, Identity_of_transporter, Nationality_of_transporter_code, Place_of_transporter,Registration_number_of_transport_code, Date_of_registration, Master_information, Date_of_last_discharge, Carrier_code, Carrier_name, Carrier_address1, Carrier_address2, Carrier_address3, Place_of_departure_code, Place_of_destination_code, Tonnage_net_weight, Tonnage_gross_weight
    FROM OPENXML(@idoc, '/Manifeste/General_segment/General_segment_id', 2) 
    WITH 
    (
    Customs_office_code Nvarchar(50), --> 2 ff et pas 3 !!!
    Voyage_number Nvarchar(50),  --> V majuscule !!!
    Date_of_departure Datetime, 
    Date_of_arrival Datetime ,
    Time_of_arrival Datetime,
    Total_number_of_packages Nvarchar(50),
    Total_number_of_containers Nvarchar(50),
    Total_gross_mass Nvarchar(50),
    Mode_of_transport_code Nvarchar(50),
    Identity_of_transporter Nvarchar(50),
    Nationality_of_transporter_code Nvarchar(50),
    Place_of_transporter Nvarchar(50),
    Registration_number_of_transport_code Nvarchar(50),
    Date_of_registration Nvarchar(50),
    Master_information Nvarchar(50),
    Date_of_last_discharge Nvarchar(50),
    Carrier_code Nvarchar(50),
    Carrier_name Nvarchar(50),
    Carrier_address1 Nvarchar(50),
    Carrier_address2 Nvarchar(50),
    Carrier_address3 Nvarchar(50), 
    Carrier_address4 Nvarchar(50),
    Place_of_departure_code Nvarchar(50),
    Place_of_destination_code Nvarchar(50),
    Tonnage_net_weight Nvarchar(10),
    Tonnage_gross_weight Nvarchar(10)
    );
     
    EXEC sp_xml_removedocument @idoc; --> ipératif aussi
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre aide!!!
    Le souci actuellement est le suivant:
    CMDLP 16366 2016-08-13 00:00:00.000 2016-09-13 00:00:00.000 1900-01-01 00:00:00.000 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL

    Je ne comprend pas pourquoi ses valeurs sont nul alors qu'ils ont des valeurs réelles dans le fichiers XML
    Vraiment merci pour votre aide.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par MC BAO Voir le message
    Merci pour votre aide!!!
    Le souci actuellement est le suivant:
    CMDLP 16366 2016-08-13 00:00:00.000 2016-09-13 00:00:00.000 1900-01-01 00:00:00.000 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL

    Je ne comprend pas pourquoi ses valeurs sont nul alors qu'ils ont des valeurs réelles dans le fichiers XML
    Vraiment merci pour votre aide.
    C'est parfaitement normal. Vous vous intéressez à un nœud en particulier :
    /Manifeste/General_segment/General_segment_id'
    les autres balaises n'étant pas sur cette branche, cela ne vous retourne rien !

    Vous devez faire autant d'accès pour chaque chemin.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. import de plusieurs fichiers XML dans Access 2003
    Par frdek dans le forum Access
    Réponses: 7
    Dernier message: 09/08/2008, 19h39
  2. Import d'un fichier XML
    Par Jeunestb dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 30/01/2008, 23h13
  3. Réponses: 6
    Dernier message: 20/12/2006, 13h21
  4. Réponses: 1
    Dernier message: 28/04/2006, 16h17
  5. Importation d'un fichier xml vers une BD mysql avec php
    Par naima2005 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 28/04/2006, 15h23

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