2012-06-12 27 views
8

मैं निम्नलिखित एक्सएमएल है T-SQL में एक xml चर से नोड नाम और मूल्यों को प्राप्त करने के लिए -कैसे

<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> 

मैं चाइल्ड नोड नाम और 2 कॉलम के साथ एक resultset में अपने मूल्य का चयन करना (FieldName , फील्डवेल्यू) जैसे -

TotCR 222.10 
PerCF  0.40 
... 
PerCFWM 1.50 

एक्सएमएल में नोड्स अलग-अलग होंगे और हमेशा समान नहीं होंगे। यहां तक ​​कि मान पूर्णांक या पाठ हो सकता है।

क्या आप कृपया सुझाव दे सकते हैं कि SQL सर्वर 2008 R2 में OPENXML का उपयोग करके इसे कैसे करें?

उत्तर

28

आप एक्सएमएल नोड के प्राप्त करने के लिए नाम local-name() फ़ंक्शन का उपयोग कर सकते हैं - कुछ इस तरह का प्रयास करें:

enter image description here

:

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) 

यह आप की तरह एक निर्गम कुछ देना चाहिए