2012-06-12 12 views
8

Ho il seguente XML -Come ottenere il nome ei valori nodo da una variabile xml in 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> 

ho bisogno di selezionare il nome del nodo figlio e il suo valore in un gruppo di risultati con 2 colonne (FieldName , fieldValue) come -

TotCR 222.10 
PerCF  0.40 
... 
PerCFWM 1.50 

I nodi del XML variano e possono non essere sempre lo stesso. Anche i valori possono essere interi o testo.

Potete per favore suggerire come procedere utilizzando OPENXML in SQL Server 2008 R2?

risposta

28

È possibile utilizzare la funzione local-name() al nome get del nodo XML - provare qualcosa di simile:

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) 

Questo dovrebbe dare un qualcosa di output come:

enter image description here

Problemi correlati