J'essaie d'importer des données à partir d'un fichier XML assez volumineux vers un serveur SQL. Après quelques recherches en ligne, j'ai décidé d'utiliser OpenXML. La requête que j'ai à ce jour estComment accéder aux éléments imbriqués en XML avec OpenXML
DECLARE @doc INT
DECLARE @xml XML
SELECT @xml = evnt
FROM OPENROWSET (BULK 'c:\archive.xml', SINGLE_BLOB) AS Import(evnt)
EXEC sp_xml_preparedocument @doc OUTPUT, @xml
SELECT *
FROM OPENXML(@doc, '/Events/eventData/event', 2)
WITH (
id varchar(max)
)
EXEC sp_xml_removedocument @doc
De cette façon, je suis en mesure d'obtenir des éléments énumérés dans « événement », mais comment pourrais-je obtenir un élément d'un niveau plus bas de « événement ». Par exemple, comment aurais-je l'étiquette 'CustId' ci-dessous? Les éléments à l'intérieur de 'event' sont principalement nécessaires, d'où le chemin ne peut être changé. Aussi d'autres approches seraient bien aussi. J'en ai besoin pour fonctionner à partir de SQL Server, donc je ne peux pas utiliser SSIS ou d'autres outils externes similaires. XQuery semble prendre beaucoup de temps.
J'utilise SQL Server 2008 R2
Pourquoi avez-vous choisi OpenXML à la place du support natif XQuery SQL Server? Semble beaucoup plus facile à utiliser et plus flexible ... –
Je lis dans beaucoup d'endroits qu'OpenXML est meilleur avec des fichiers plus grands, bien qu'il soit très intensif en mémoire. Les fichiers à analyser peuvent facilement dépasser 100 Mo. – Ryez