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 :

Importer un fichier XML dans une table SQL Server


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut Importer un fichier XML dans une table SQL Server
    Bonjour,
    Voici mon fichier XML que j'aimerais importer dans une table SQL server 2008 (si possible en faisant un Create table en fonction des metadata d'entrée). A noter que le script devra être impérativement dans une proc stocké, ce qui limite donc les possibilités (pas de SSIS).
    J'ai essayé pleins de trucs avec les BULK mais je ne m'en sors pas car j'ai sans doute trop de lacunes sur les format XML.
    C'est notamment au niveau des noeuds que je ne comprends pas. Quels sont les noeuds dans mon cas ?
    J'ai bien vu des discussions ici mais cela ne m'a pas bcp aidé.

    Merci pour votre aide.

    PS : le fichier xml est généré par Cognos.
    __________________________________________________

    Code xml : 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
      <?xml version="1.0" encoding="utf-8" ?> 
    - <dataset xmlns="http://developer.cognos.com/schemas/xmldata/1/" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
    - <!-- 
    <dataset
        xmlns="http://developer.cognos.com/schemas/xmldata/1/"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xs:schemaLocation="http://developer.cognos.com/schemas/xmldata/1/ xmldata.xsd"
    >
     
     
      --> 
    - <metadata>
      <item name="Date observation Fait Personnes Produits format AAAAMMJJ" type="xs:int" precision="1" /> 
      <item name="Nature personne" type="xs:string" length="62" /> 
      <item name="Montant Portefeuille (commercial)" type="xs:decimal" scale="2" precision="38" /> 
      </metadata>
    - <data>
    - <row>
      <value>20181031</value> 
      <value xs:nil="true" /> 
      <value>94117,99</value> 
      </row>
    - <row>
      <value>20181031</value> 
      <value>PP</value> 
      <value>55080,63</value> 
      </row>
    - <row>
      <value>20181031</value> 
      <value>PM</value> 
      <value>20716,52</value> 
      </row>
      </data>
      </dataset>

  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 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Pour importer un fichier XML dans une table il suffit d'utiliser la fonction table OPENROWSET en mode BULK.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE T_XML (ID INT IDENTITY, X XML);
    GO
     
    INSERT INTO T_XML
    SELECT IMPORT.BulkColumn 
    FROM   OPENROWSET(BULK N'D:\email.txt', SINGLE_BLOB) AS IMPORT;
    Après vous pouvez indexer, parser…

    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/ * * * * *

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut
    ça j'avais réussi à le faire.

    C'est après que je n'y suis pas arrivé car notamment, je n'arrivais pas à déterminer mes noeuds.

  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 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Il faut que vous utilisiez les fonctions de XQuery pour en déterminer les noms.

    Par exemple avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT X.query('local-name(...)')
    A lire :
    https://docs.microsoft.com/en-us/sql...ql-server-2017

    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
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut
    Je n'y arrive tjs pas mais j'ai compris d'où venait le problème. Il vient de ce qu'il y a en haut du fichier xml, une sorte de cartouche.
    Car si je modifie à la main mon fichier xml en supprimant cette partie là, ça fonctionne.
    Comment ignorer cette partie ?
    J'ai essayé en important le fichier xml dans un nvarchar puis de faire un substring mais le nvarchar(max) a une longueur trop petite par rapport à mon fichier.

    merci.

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0" encoding="utf-8" ?> 
    - <dataset xmlns="http://developer.cognos.com/schemas/xmldata/1/" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
    - <!-- 
    <dataset
        xmlns="http://developer.cognos.com/schemas/xmldata/1/"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xs:schemaLocation="http://developer.cognos.com/schemas/xmldata/1/ xmldata.xsd"
    >
     
      --> 
    - <metadata>
      <item name="Date observation Fait Personnes Produits format AAAAMMJJ" type="xs:int" precision="1" /> 
      <item name="Nature personne" type="xs:string" length="62" /> 
      <item name="Montant Portefeuille (commercial)" type="xs:decimal" scale="2" precision="38" /> 
      </metadata>

  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 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Effectivement UTF8 (qui est une grosse merde) est inutilisable sous SQL Server. Il faut de l'UTF 16.

    Vous devez commencer par encoder correctement le fichier (modifier l'entête ne suffira pas...)

    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. Script d'import d'un fichier XML dans une table SQL-Server
    Par thiersco dans le forum Développement
    Réponses: 2
    Dernier message: 26/11/2013, 09h45
  2. Importer fichier excel 2003 dans une table SQL Server
    Par fainch dans le forum Développement
    Réponses: 6
    Dernier message: 08/12/2011, 22h59
  3. Réponses: 0
    Dernier message: 17/11/2011, 08h44
  4. Réponses: 5
    Dernier message: 24/11/2010, 14h54
  5. Charger Fichiers XML dans une table avec SQL*LOADER
    Par devdev2003 dans le forum SQL
    Réponses: 2
    Dernier message: 14/01/2008, 10h40

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