2009-10-14 15 views
8

मेरे पास एक प्रश्न है जो XML परिणाम लौटने के लिए for xml explit का उपयोग करता है।टीएसक्यूएल का एक्सएमएल परिणाम कॉलम "एक्सएमएल स्पष्ट के लिए"?

का चयन करें ... से ... आदेश से [BatchType! 1! TypeName], [FormType! 2! TypeName], टैग, एक्सएमएल स्पष्ट के लिए अभिभावक , रूट ('ClientImages')

लेकिन उसके एवज में स्तंभ नाम के नाम के रूप में

alt text

के रूप में गुप्त कुछ वहाँ स्तंभ का नाम बदलने के लिए एक रास्ता है है?


[उत्तर] मैं था एक कई WITH बयान नेस्ट तो मैं एक अस्थायी तालिका @xmlTable में FOR XML EXPLICIT लागू किए बिना क्वेरी का परिणाम बचाया है और फिर मुखर यौन परिणाम एक्सएमएल स्थापित करने के लिए एक XML तो यह लौटे ।

declare @xmlResult xml 
set @xmlResult =( 
    select * 
    from @xmlTable 
    for xml explicit, root('ClientImages')) 

select @xmlResult as XmlResult 
+1

SQL सर्वर का कौन सा संस्करण आप उपयोग कर रहे हैं ?? 2005 और बाद में, निश्चित रूप से "एक्सएमएल एक्सप्लिकेट के लिए" की आवश्यकता नहीं है - एक्सएमएल पाथ का उपयोग करना बहुत आसान है और –

+0

एसक्यूएल सर्वर 2005/2008 – Sung

+0

@marc_s: मेरे पास जटिल संरचना है जिसके लिए मैं इसका उपयोग नहीं कर सकता एक्सएमएल पाथ। – Sung

उत्तर

7

नहीं, जहां तक ​​मुझे पता है, वहां नहीं है। एसक्यूएल सर्वर प्रबंधन स्टूडियो आपके एक्सएमएल के लिए ऐसे नाम को स्वत: उत्पन्न करेगा।

आप पहली बार एक एक्सएमएल चर करने के लिए अपने उत्पादन आवंटित और फिर है कि एक "अच्छा" कॉलम नाम पर प्राप्त करने के लिए कर सकता है:

DECLARE @XmlResult XML 

SELECT @XmlResult = ...... 
    FROM ....... 


SELECT @XmlResult 

लेकिन उसके अलावा, मैं किसी भी तरह के बारे में पता नहीं कर रहा हूँ एसएसएमएस द्वारा उत्पन्न कॉलम के नाम को प्रभावित करने के लिए।

मार्क

+1

'साथ 'बयानों के पुनर्गठन के बजाय, मैंने केवल परिणाम (बिना एक्सएमएल एक्सप्लिट' के लिए लागू किए बिना) को एक temp तालिका में डाल दिया और फिर इसे temp तालिका से एक्सएमएल के रूप में वापस कर दिया - उत्तर अपडेट किया गया। – Sung

17

- एक का चयन करें (प्रथम) और प्रकार (अंत पर) जोड़ने के लिए, और के रूप में [कुछ]

 

select 
    ( 
    select 1 as tag, 
    null  as parent, 
    'algo'  as [nodo!1!attr] 
    for xml explicit, type 
    ) as [MyDesiredName] 



0

आप अपने लौटे एक्सएमएल में नामस्थान की जरूरत है:

WITH XMLNAMESPACES ('urn:http://YourNamespaceHere' as NS0) 
SELECT (...) AS XmlResult 

आप उप-चयन में NS0 नेमस्पेस उपसर्ग का भी उपयोग कर सकते हैं।

संबंधित मुद्दे