Définir name space dans sp_xml_preparedocument
Bonjour à tous,
Voici le contexte de mon problème.
J'ai réalisé un import d'un fichier XML en WebDev 19. Cet import marchait très bien jusqu'au jour où le fichier est passé de 800 Ko à 50 Mo, de 5 000 lignes à plus de 310 000...
Moi aussi j'ai eu mal en l'apprenant. L'import met maintenant 6h pour être traité. Ce qui m’explose tous les TIME OUT.
Après des jours de recherche, de test j'ai trouvé un script SQL qui me permet de traiter le fichier complet en moins de 5 minutes.
Le problème est que je n'arrive pas à définir le NAMESPACE.
Le script est fonctionnel si je retire du fichier :
Code:
xmlns="http://developer.cognos.com/schemas/xmldata/1/"
Quelqu'un aurait-il une solution ?
Voici un extrait du fichier :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?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"
>
-->
<data>
<row>
<value>1</value>
<value>2</value>
<value>3</value>
<value>4</value>
</row>
<row>
<value>5</value>
<value>6</value>
<value>7</value>
<value>8</value>
</row>
</data>
</dataset> |
et voici le script SQL permettant de le traiter
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| DECLARE @XmlDocumentHandle int
DECLARE @XmlDocument varchar(max)
declare @myDoc xml
;WITH XMLNAMESPACES('http://developer.cognos.com/schemas/xmldata/1/' as dc)
SELECT @myDoc = BulkColumn
FROM OPENROWSET(BULK 'C:/test.xml'
, SINGLE_CLOB) AS X
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @XmlDocumentHandle OUTPUT, @myDoc--, '<dataset xmlns="http://developer.cognos.com/schemas/xmldata/1/"/>'
-- Execute a SELECT stmt using OPENXML rowset provider.
SELECT *
FROM OPENXML (@XmlDocumentHandle, '/dataset/data/row',2)
WITH (value1 varchar(10) 'value[1]',
value2 varchar(10) 'value[2]',
value3 varchar(10) 'value[3]',
value4 varchar(10) 'value[4]')
EXEC sp_xml_removedocument @XmlDocumentHandle |