पृष्ठभूमि मैं एक XML स्तंभ में SQL तालिका (SQL सर्वर का उपयोग). प्रत्येक नोड एक अलग राशि मेटाडाटा के. उदाहरण के लिए, नीचे दिए गए उदाहरण में, कदम नंबर 1 है केवल "नहीं" के रूप में मेटाडाटा, जबकि, कदम नंबर 2 इसके अतिरिक्त है RBuffer.
<Step No="1" >Step Number 1</Step>
<Step No="2" RBuffer="6000">Step Number 2</Step>
<Step No="3" Macro="5">Step Number 3</Step>
उम्मीद उत्पादन
मैं करना चाहते हैं निकालने के लिए इस मेटाडाटा गतिशील रूप से जब भी हथियाने के मूल्य. के लिए ऊपर के उदाहरण में, इस तरह लग रही होगी तालिका के नीचे । महत्वपूर्ण बात है, यह बात नहीं करनी चाहिए कि कैसे कई मेटाडाटा टैग कर रहे हैं, मैं यह चाहते हैं जाने के लिए उन सभी के माध्यम से. मेरे कुछ डेटा है 10+ टैग.
नोड | कदम | कुंजी | मूल्य |
---|---|---|---|
कदम | 1 | मूल्य | कदम नंबर 1 |
कदम | 2 | RBuffer | 6000 |
कदम | 2 | मूल्य | कदम नंबर 2 |
कदम | 3 | मैक्रो | 5 |
कदम | 3 | मूल्य | कदम नंबर 3 |
अब तक काम
अब तक, मैं सक्षम किया गया है निकालने के लिए मेटाडाटा में एक स्थिर तरीके:
SELECT o.value('@No', 'varchar(32)') [Step]
,o.value('@Macro', 'varchar(32)') [Macro]
,o.value('@RBuffer', 'varchar(32)') [RBuffer]
,o.value('(text())[1]', 'varchar(32)') [Action]
FROM [dbo].[dw_mrd_vss_rundetail_stg] S
CROSS APPLY S.[rundata_detail].nodes('Step') xmlData(o)
देता है, जो निम्न तालिका:
कदम | मैक्रो | RBuffer | कार्रवाई |
---|---|---|---|
1 | अशक्त | अशक्त | कदम नंबर 1 |
2 | अशक्त | 6000 | कदम नंबर 2 |
3 | 5 | अशक्त | कदम नंबर 3 |
लेकिन मैं करने के लिए स्पष्ट रूप से प्रत्येक कॉल के मूल्य और बनाने के कॉलम में इस तरह से नहीं स्केलेबल. किसी भी मदद की सराहना की जाएगी. मैं अपेक्षाकृत नया हूँ के लिए इस तरह के munging डेटा SQL में है, तो स्पष्टीकरण के कोड उपयोगी हो जाएगा ।