वांछित लेआउट (नीचे) के अनुसार SQL सर्वर तालिका में निम्न XML ब्लॉक को पार्स करने का सही तरीका क्या होगा? क्या यूनियन या लूप के बिना, एक ही चयन कथन के साथ ऐसा करना संभव है? कोई लेने वाला? अग्रिम में धन्यवाद। इनपुट एक्सएमएल:एसक्यूएल तालिका में नेस्टेड एक्सएमएल को पार्सिंग
<ObjectData>
<Parameter1>some value</Parameter1>
<Parameter2>other value</Parameter2>
<Dates>
<dateTime>2011-02-01T00:00:00</dateTime>
<dateTime>2011-03-01T00:00:00</dateTime>
<dateTime>2011-04-01T00:00:00</dateTime>
</Dates>
<Values>
<double>0.019974</double>
<double>0.005395</double>
<double>0.004854</double>
</Values>
<Description>
<string>this is row 1</string>
<string>this is row 2</string>
<string>this is row 3</string>
</Values>
</ObjectData>
वांछित तालिका उत्पादन:
Parameter1 Parameter2 Dates Values Description
Some value Other value 2011-02-01 00:00:00.0 0.019974 this is row 1
Some value Other value 2011-03-01 00:00:00.0 0.005395 this is row 2
Some value Other value 2011-04-01 00:00:00.0 0.004854 this is row 3
मैं एक का चयन करें SQL विवरण OPENXML या xml.nodes() कार्यक्षमता का उपयोग करने के बाद कर रहा हूँ। उदाहरण के लिए, निम्नलिखित चयन विवरण मूल्यों और तिथियों के बीच उत्पादन में परिणाम (जो मानों और तिथियों के सभी क्रमिक क्रम है), जो कुछ मैं टालना चाहता हूं।
SELECT
doc.col.value('Parameter1[1]', 'varchar(20)') Parameter1,
doc.col.value('Parameter2[1]', 'varchar(20)') Parameter2,
doc1.col.value('.', 'datetime') Dates ,
doc2.col.value('.', 'float') [Values]
FROM
@xml.nodes('/ObjectData') doc(col),
@xml.nodes('/ObjectData/Dates/dateTime') doc1(col),
@xml.nodes('/ObjectData/Values/double') doc2(col);
बहुत धन्यवाद, माइकल। यह वास्तव में अच्छी तरह से काम करता है! सिंटेक्स अभी भी दिमागी दबदबा है, मैंने कल्पना की कि यह थोड़ा आसान हो ... :) – Puzzled