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"
ensuite je requete le contenu xml des différents noeuds pour intégration dans des tables.
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]
Par exemple pour le noeud productdescription j’exécute:
comme nous n'avons pas la même table de langue, je suis obligé de passer par une table de mapping LANGUE_PROD.
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
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:
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: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.
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.
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)
EDIT:
en fait non, car si j'execute
ça passe. par contre si je rajoute une autre colonne ça plate :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 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)
/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.
Partager