Witam,
mam załadować tabele w sql danymi z XML-a. Niestety pojawił się problem ponieważ XML posiada kilka poziomów hierarchii. Poniżej umieściłem skrypt w którym wyciągam jedną daną "AtcCode" potrzebuję wyciągnąć dane z wyższego poziomu DrugDescription kolumnę DrugId.
XML:
<?xml version="1.0" encoding="utf-16"?><ArrayOfDrugDescription xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <DrugDescription> <DrugId>1</DrugId> <DrugShortName>Abaktal</DrugShortName> <DrugDescComposition>1 tabl. powl.</DrugDescComposition> <DrugDescActivity>Chemioterapeutyk </DrugDescActivity> <DrugDescIndication>Pefloną odpornością.</DrugDescIndication> <DrugDescContrInd>Nadwrażliwość zgowych).</DrugDescContrInd> <DrugDescWarning>Ostrożnie zy-galaktozy.</DrugDescWarning> <DrugDescPregn>Nie stosować w ciąży i okresie karmienia piersią.</DrugDescPregn> <DrugDescSideEff>Zaburzenia dnią kończynę).</DrugDescSideEff> <DrugDescInter>Preparaty nie pefloksacyny we krwi.</DrugDescInter> <DrugDescDosage>Doustnie. Doroślleży zmniejszyć dawki.</DrugDescDosage> <DrugDescNotes>Pacjen4:35:14--&gt;</DrugDescNotes> <DrugTherClass>chemotherapeuticum</DrugTherClass> <DrugProdName>Sandoz</DrugProdName> <DrugProdID>619</DrugProdID> <DrugAtc> <item> <AtcCode>J01MA03</AtcCode> </item> </DrugAtc> <DrugSubst> <item> <SubstId>895</SubstId> </item> </DrugSubst> <Modified>2011-10-03 13:08:41</Modified> <Status>active</Status> </DrugDescription>
Mój skrypt:
SELECT --X.DrugDescription.query('DrugId').value('.', 'INT'),Y.item.query('AtcCode').value('.', 'VARCHAR(10)'),Y.item.query('DrugId').value('.', 'INT')FROM (SELECT CAST(x AS XML) FROM OPENROWSET(BULK 'D:\Shared\ImportLekowPharmindex\Pliki_xml\DrugDescription.xml',SINGLE_BLOB) AS T(x)) AS T(x) cross APPLY x.nodes('ArrayOfDrugDescription/DrugDescription/DrugAtc/item') AS Y(item)