2012-06-12 6 views
8

Mam następujące xml -Jak uzyskać nazwę węzła i wartości ze zmiennej XML w T-SQL

<Surveys xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ImmForm XML Schema NHS Direct.xsd"><Svy SurveyName="WeeklyFluSurveillance2012/13-NHSDirectWeek40w/e07/10/2012" OrgCode="NHS Direct"><TotCR>222.10</TotCR><PerCF>0.40</PerCF><PerCFunder1>0.20</PerCFunder1><PerCF1to4>0.30</PerCF1to4><PerCF5to14>0.50</PerCF5to14><PerCF15to44>0.40</PerCF15to44><PerCF45to64>0.20</PerCF45to64><PerCF65plus>3.60</PerCF65plus> 
<PerCFNE>4.22</PerCFNE> 
<PerCFNW>6.50</PerCFNW> 
<PerCFYH>0.80</PerCFYH> 
<PerCFEM>1.00</PerCFEM> 
<PerCFWM>1.50</PerCFWM></Svy></Surveys> 

muszę wybrać nazwę węzła dziecko i jego wartość w wynikowego z 2 kolumn (FieldName , FieldValue) lubię -

TotCR 222.10 
PerCF  0.40 
... 
PerCFWM 1.50 

Węzły w pliku xml będą się różnić i nie zawsze będą takie same. Nawet wartości mogą być liczbami całkowitymi lub tekstowymi.

Czy możecie sugerować, jak to zrobić, używając OPENXML w SQL Server 2008 R2?

Odpowiedz

28

Można użyć funkcji local-name() nazwy wysiąść węzła XML - spróbuj coś takiego:

DECLARE @input XML = '...your xml here.....' 

SELECT 
    NodeName = C.value('local-name(.)', 'varchar(50)'), 
    NodeValue = C.value('(.)[1]', 'varchar(50)') 
FROM @input.nodes('/Surveys/Svy/*') AS T(C) 

To powinno dać ci coś podobnego wyjściowego:

enter image description here

Powiązane problemy