प्रत्येक कॉलम के लिए एक अलग आइटम नोड उत्पन्न करने के लिए मान के रूप में NULL वाला कॉलम जोड़ें।
SELECT
t.col1 as 'item'
,NULL
,t.col2 as 'item'
,NULL
,t.col3 as 'item'
FROM dbo.tbl as t
FOR XML PATH('parent'), TYPE;
परिणाम:
<parent>
<item>1</item>
<item>2</item>
<item>3</item>
</parent>
एसक्यूएल फिडल
यह क्यों काम करता है?
बिना नाम वाले कॉलम टेक्स्ट नोड्स के रूप में डाले जाते हैं। इस मामले में NULL मान item
. के बीच टेक्स्ट नोड के रूप में डाला जाता है नोड्स।
यदि आप NULL के बजाय वास्तविक मान जोड़ते हैं तो आप देखेंगे कि क्या हो रहा है।
SELECT
t.col1 as 'item'
,'1'
,t.col2 as 'item'
,'2'
,t.col3 as 'item'
FROM dbo.tbl as t
FOR XML PATH('parent'), TYPE;
परिणाम:
<parent>
<item>1</item>1<item>2</item>2<item>3</item></parent>
नाम के बिना कॉलम निर्दिष्ट करने का दूसरा तरीका वाइल्डकार्ड वर्ण का उपयोग करना है *
एक स्तंभ उपनाम के रूप में।
वाइल्डकार्ड कैरेक्टर के रूप में निर्दिष्ट नाम वाले कॉलम
इस मामले में वाइल्डकार्ड का उपयोग करना आवश्यक नहीं है क्योंकि NULL मानों वाले कॉलम में कॉलम नाम नहीं होता है, लेकिन यह तब उपयोगी होता है जब आप वास्तविक कॉलम से मान चाहते हैं लेकिन आप नहीं चाहते कि कॉलम नाम नोड नाम हो।