xml पथ ('') आउटपुट के लिए


9

जब मैं निम्नलिखित चलाता हूं

select t.type
  from (values ('Green'),('Blue'),('Red')) as t(type)
   for xml path('')

मुझे यह आउटपुट प्राप्त होता है

<type>Green</type>
<type>Blue</type>
<type>Red</type>

अगर मैं निम्नलिखित चलाऊं

select t.type + '/'
  from (values ('Green'),('Blue'),('Red')) as t(type)
   for xml path('')

मुझे यह आउटपुट प्राप्त होता है

Green/Blue/Red/

Xml फ़ाइल में एक लाइन पर टाइप टैग और आउटपुट को हटाने के लिए चयन में कॉन्सेप्ट को क्यों जोड़ा जाता है? SQL सर्वर 2012 चल रहा है।

जवाबों:


15

एक्सएमएल बोनर्स है

जब आप सम्मिलित स्ट्रिंग जोड़ते हैं, तो आप "पथ तत्व" खो देते हैं।

उदाहरण के लिए यदि आप ऐसा करते हैं:

SELECT t.type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('');

SELECT t.type + '/' 
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('type');

आप इसे वापस लें:

<type>Green/</type>
<type>Blue/</type>
<type>Red/</type>

स्तंभ नाम या अन्य नाम पथ तत्व के रूप में कार्य करता है।

कुछ अन्य उदाहरण जो मदद कर सकते हैं

का उपयोग करते हुए RAW, ELEMENTS

SELECT t.type + '/'
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;

SELECT t.type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;

पहले उदाहरण में, आपको जेनेरिक "पंक्ति" तत्व का नाम मिलता है, लेकिन दूसरे में आपको पंक्ति / प्रकार मिलता है।

उपयोग करते समय RAW, TYPE:

SELECT t.type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;

SELECT t.type + '/'
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;

पहला क्वेरी मान्य-ish XML लौटाता है, दूसरा एक त्रुटि फेंकता है क्योंकि पथ तत्व में एक पहचानकर्ता की कमी होती है।

का उपयोग करते हुए AUTO, तालिका उपनाम और स्तंभ नाम पथ में बदल जाता है:

SELECT type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;

SELECT type 
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;

लेकिन उपनाम के बिना, आपको एक समान त्रुटि मिलती है:

SELECT type + '/'
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;

मैं एक उदाहरण देना चाहता हूं, FOR XML EXPLICITलेकिन मेरे लिए अभी से पीना शुरू करना गैरजिम्मेदाराना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.