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 :

Problème lecture XML


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 44
    Points : 39
    Points
    39
    Par défaut Problème lecture XML
    Bonjour à tous.

    Pour commencer, nous travaillons sur SQLServer 2008
    pour un de nos traitements quotidiens, nous devons traité des fichiers xml issus du site icecat (pour intégration d'un catalogue de produits).

    Pour cela j'integre les fichiers à traiter dans une table de traitement "T_fiche_Icecat"

    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
    CREATE TABLE [dbo].[T_Fiche_Icecat](
    	[Fiche_IcecatId] [bigint] IDENTITY(1,1) NOT NULL,
    	[ContenuXML] [xml] NULL,
    	[etat] [varchar](15) NULL,
    	[NomFic] [varchar](255) NOT NULL,
    	[DateDebutIntegr] [datetime] NULL,
    	[DateFinIntegr] [datetime] NULL,
    	[ErrorNumber] [bigint] NULL,
    	[ErrorMessage] [varchar](1000) NULL
    ) ON [PRIMARY]
     
    /****** Object:  Index [PK_T_Fiche_Icecat]    Script Date: 06/17/2015 08:53:23 ******/
    ALTER TABLE [dbo].[T_Fiche_Icecat] ADD  CONSTRAINT [PK_T_Fiche_Icecat] PRIMARY KEY CLUSTERED 
    	(
    	[Fiche_IcecatId] ASC
    	)
    WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    /****** Object:  Index [UQ_nomfic]    Script Date: 06/17/2015 08:53:23 ******/
    ALTER TABLE [dbo].[T_Fiche_Icecat] ADD  CONSTRAINT [UQ_nomfic] UNIQUE NONCLUSTERED 
    	(
    	[NomFic] ASC
    	)
    WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ensuite je requete le contenu xml des différents noeuds pour intégration dans des tables.
    Par exemple pour le noeud productdescription j’exécute:
    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
     
    insert into ICE_ProductDescription
    select   C.value('../@ID','Bigint') ProductID
    	,C.value('../@Prod_id','nvarchar(255)') as Prod_id	--  Prod_id="452679-B21"
    	,C.value('./@ID','int') ProductDescriptionID
    	,C.value('./@LongDesc','nvarchar(4000)') LongDesc
    	,C.value('./@ManualPDFSize','int') ManualPDFSize	
    	,C.value('./@ManualPDFURL','nvarchar(512)') ManualPDFURL	
    	,C.value('./@PDFSize','int') PDFSize	
    	,C.value('./@PDFURL','nvarchar(512)') PDFURL	
    	,C.value('./@ShortDesc','nvarchar(512)') ShortDesc	
    	,C.value('./@URLr','nvarchar(512)') URL	
    	,C.value('./@WarrantyInfo','nvarchar(512)') WarrantyInfo
    	,LP.LGU_ID langid	
    from T_Fiche_Icecat T 
    	CROSS APPLY T.ContenuXML.nodes('ICECAT-interface/Product/ProductDescription') AS T_XML(C)	
    		join LANGUE_PROD LP on LP.LGU_ID_ICE=C.value('./@langid','int')
    		left join ICE_ProductDescription PD on PD.ProductID =C.value('../@ID','int')
    							and PD.ProductDescriptionID =C.value('./@ID','int')
    							and PD.langid =LP.LGU_ID 
    where	ContenuXML.exist('ICECAT-interface/Product/ProductDescription')=1
    	and PD.ProductID is null
    comme nous n'avons pas la même table de langue, je suis obligé de passer par une table de mapping LANGUE_PROD.

    Ces requêtes tournent en prod depuis plus de 6 mois sans soucis.
    Aujourd'hui, nous avons des fichiers xml qui font planté le traitement et je ne comprend pas le problème et donc je ne sais pas le résoudre.

    le fichier est le suivant:
    463182.txt
    j'ai du mettre le fichier en txt car en xml j'avais un rejet à l'upload.
    l'erreur est la suivante:

    Msg*0, Niveau*11, État*0, Ligne*0
    Une erreur grave s'est produite sur la commande actuelle. Les résultats éventuels doivent être ignorés.
    Msg*0, Niveau*20, État*0, Ligne*0
    Une erreur grave s'est produite sur la commande actuelle. Les résultats éventuels doivent être ignorés.
    Le problème vient de la lecture xml car la requête suivante plante également (même erreur) et ne fait pas référence aux tables à alimenter:
    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
    select  T.*
    		,C.value('../@ID','Bigint') ProductID
    		,C.value('../@Prod_id','nvarchar(255)') as Prod_id	--  Prod_id="452679-B21"
    		,C.value('./@ID','int') ProductDescriptionID
    		,C.value('./@LongDesc','nvarchar(4000)') LongDesc
    		,C.value('./@ManualPDFSize','int') ManualPDFSize	
    		,C.value('./@ManualPDFURL','nvarchar(512)') ManualPDFURL	
    		,C.value('./@PDFSize','int') PDFSize	
    		,C.value('./@PDFURL','nvarchar(512)') PDFURL	
    		,C.value('./@ShortDesc','nvarchar(512)') ShortDesc	
    		,C.value('./@URL','nvarchar(512)') URL	
    		,C.value('./@WarrantyInfo','nvarchar(512)') WarrantyInfo
    						--,LP.LGU_ID langid	
    	from T_Fiche_Icecat T 
    		CROSS APPLY T.ContenuXML.nodes('ICECAT-interface/Product/ProductDescription') AS T_XML(C)
    A priori, c'est la lecture de l'attribut @URL qui plante car quand je commente la ligne, la requête se termine sans soucis.

    EDIT:
    en fait non, car si j'execute
    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
    select  T.*
    		,C.value('../@ID','Bigint') ProductID
    		,C.value('../@Prod_id','nvarchar(255)') as Prod_id	--  Prod_id="452679-B21"
    		,C.value('./@ID','int') ProductDescriptionID
    		--,C.value('./@LongDesc','nvarchar(4000)') LongDesc
    		--,C.value('./@ManualPDFSize','int') ManualPDFSize	
    		--,C.value('./@ManualPDFURL','nvarchar(512)') ManualPDFURL	
    		--,C.value('./@PDFSize','int') PDFSize	
    		--,C.value('./@PDFURL','nvarchar(512)') PDFURL	
    		--,C.value('./@ShortDesc','nvarchar(512)') ShortDesc	
    		,C.value('./@URL','nvarchar(512)') URL	
    	--	,C.value('./@WarrantyInfo','nvarchar(512)') WarrantyInfo
    						--,LP.LGU_ID langid	
    	from T_Fiche_Icecat T 
    		CROSS APPLY T.ContenuXML.nodes('ICECAT-interface/Product/ProductDescription') AS T_XML(C)
    ça passe. par contre si je rajoute une autre colonne ça plate :s
    /EDIT
    Dans le fichier , le noeud productDescription est vide. Normalement ca ne devrait pas poser de soucis.

    Je ne sais pas si les infos seront suffisantes pour identifier le problème donc je reste à votre disposition.

    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 44
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    quelques vues sur mon poste mais pas de réponses
    Est ce que mon problème est trop spécifique?
    je ne donne pas assez d'info? si c'est ça, de quoi auriez vous besoin?

    Cdt

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 755
    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 755
    Points : 52 530
    Points
    52 530
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Badplayer1603 Voir le message
    ...de quoi auriez vous besoin?

    Cdt
    de temps !!!!
    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/ * * * * *

  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 755
    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 755
    Points : 52 530
    Points
    52 530
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Badplayer1603 Voir le message
    Bonjour,

    quelques vues sur mon poste mais pas de réponses
    Est ce que mon problème est trop spécifique?
    je ne donne pas assez d'info? si c'est ça, de quoi auriez vous besoin?

    Cdt
    Test par étapes dans l'ordre :

    • Créé un index PRIMAIRE sur le XML et essaye
    • Au besoin si tu as un XSD, ajoute une collection de schéma et type ta colonne XML, sinon créé le XSD par un outil
    • Ajoute un index PROPERTY ou VALUES sur le XML


    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
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 44
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    merci pour votre retour.

    J'ai déja des indexes xml.
    Je croyais que le script de création les prendraient en compte mais apparemment non.

    voici les scripts pour compléter mon post initial
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE PRIMARY XML INDEX [Index_T_Fiche_Icecat] ON [dbo].[T_Fiche_Icecat] 
    (
    	[ContenuXML]
    )WITH (PAD_INDEX  = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)
    GO
    CREATE XML INDEX [Index_T_Fiche_Icecat_PATH] ON [dbo].[T_Fiche_Icecat] 
    (
    	[ContenuXML]
    )
    USING XML INDEX [Index_T_Fiche_Icecat] FOR PATH WITH (PAD_INDEX  = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)
    GO
    Par contre, vous préconisez un index de type value ou property. Va falloir que je me penche de nouveau sur la doc car quand je les avais créé c'est le Path qui m'avais paru le plus opportun :s.

    Concernant le xsd, il va falloir que je le créé.
    Pour typer la colonne xml, cela se fait au niveau de la table?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE [dbo].[T_Fiche_Icecat](
    	[Fiche_IcecatId] [bigint] IDENTITY(1,1) NOT NULL,
    	[ContenuXML] [xml(nom du schema)] NULL,
    	[etat] [varchar](15) NULL,
    	[NomFic] [varchar](255) NOT NULL,
    	[DateDebutIntegr] [datetime] NULL,
    	[DateFinIntegr] [datetime] NULL,
    	[ErrorNumber] [bigint] NULL,
    	[ErrorMessage] [varchar](1000) NULL
    ) ON [PRIMARY]
    Je regarde tout ça et je reviens vers vous.

  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 755
    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 755
    Points : 52 530
    Points
    52 530
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Badplayer1603 Voir le message
    Par contre, vous préconisez un index de type value ou property. Va falloir que je me penche de nouveau sur la doc car quand je les avais créé c'est le Path qui m'avais paru le plus opportun :s.
    Il faut tester

    Concernant le xsd, il va falloir que je le créé.
    Pour typer la colonne xml, cela se fait au niveau de la table?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE [dbo].[T_Fiche_Icecat](
    	[Fiche_IcecatId] [bigint] IDENTITY(1,1) NOT NULL,
    	[ContenuXML] [xml(nom du schema)] NULL,
    	[etat] [varchar](15) NULL,
    	[NomFic] [varchar](255) NOT NULL,
    	[DateDebutIntegr] [datetime] NULL,
    	[DateFinIntegr] [datetime] NULL,
    	[ErrorNumber] [bigint] NULL,
    	[ErrorMessage] [varchar](1000) NULL
    ) ON [PRIMARY]
    Je regarde tout ça et je reviens vers vous.
    Oui :
    1) créer une collection de schéma XML avec les fichiers xs...
    2) appliquer à la création de la table ou de la colonne, le typage sur la colonne XML.

    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
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 44
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    vu de nos priorités actuelles, mon responsable ne me laisse pas de temps pour tester tout ça!
    Je pourrais surement tester ça quand la charge diminuera ou que le traitement deviendra prioritaire.

    En attendant, merci pour vos réponses.

    Cdt

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 44
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    retour plus rapide que prévu car ça a planté de nouveau ce matin

    j'ai donc créé le schéma que j'ai appliqué à ma colonne de type XML => toujours la même erreur.
    j'ai également testé les différents type d'index sans résultat.

    Par contre, j'ai supprimé tous les index et quand je supprime l'index primaire ça ne plante plus. quand je le recréé, ça plante de nouveau.
    Autre point à noter c'est que ça plante sur le noeud ProductDescription et il n'est pas présent dans les XML qui plantent. Je pense que ça ne devrait pas être bloquant mais sait on jamais.

    Auriez vous d'autre piste?

    Cdt.

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 755
    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 755
    Points : 52 530
    Points
    52 530
    Billets dans le blog
    5
    Par défaut
    Vous devez avoir du XML mal formé quelque part....

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

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 44
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    n'est ce pas le role du schéma de valider le format du xml à l'insertion?
    car dans le cas présent, les xml de ma table respectent le format imposé par le xsd.

    Je n'ai pas construit le xsd à partir du fichier mais récupéré celui mis à disposition par le fournisseur icecat. J'entends par la qu'il n'a pas été généré en auto à partir d'un fichier xml potentiellement mal formaté.

    Si l'erreur est également présente dans le xsd, ça voudrais dire que l'erreur est général au xml de icecat, dans ce cas pourquoi est ce que ça ne planté que rarement?

    Y a t'il des impératifs XML non vérifié dans les xsd?

    Cdt.

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 755
    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 755
    Points : 52 530
    Points
    52 530
    Billets dans le blog
    5
    Par défaut
    Le xsd ne garantit pas que le xml soit bien formé. En effet, une colonne typée XML peut être un fragment et non pas un document XML. Le xsd opère à deux niveaux :
    sémantique : vérification des noms de balises, chemins et cardinalités
    technique : permet une meilleure indexation par "fermeture" des éléments

    Peut être s'agit-il là d'un dysfonctionnement de la machine : installation anormale ou bug SQL Server.

    Essayez de reproduire le problème sur une autre machine / instance / version
    Si le problème persiste, faites appel à la ligne chaude de MS !

    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. Problème lecture xml avec XML::SIMPLE
    Par chalu133 dans le forum Langage
    Réponses: 1
    Dernier message: 05/12/2012, 16h12
  2. Problème lecture XML
    Par Furr dans le forum VB.NET
    Réponses: 3
    Dernier message: 09/08/2012, 10h07
  3. [JDOM] Problème lecture XML
    Par Mhira dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 29/05/2012, 21h50
  4. Problème lecture XML
    Par David_Geek dans le forum VBScript
    Réponses: 6
    Dernier message: 02/01/2010, 16h33
  5. Problème lecture XML
    Par linkman dans le forum C#
    Réponses: 2
    Dernier message: 19/09/2008, 11h53

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