2012-02-06 4 views
7

संदेश 1086, स्तर 15, राज्य 1, रेखा 20 के लिए यूनियन का उपयोग सभी एक्सएमएल क्लॉज दृश्य, इनलाइन फ़ंक्शंस, व्युत्पन्न तालिकाओं और उपकुंजी में अमान्य है जब उनमें एक सेट ऑपरेटर होता है। चारों ओर काम करने के लिए, व्युत्पन्न तालिका वाक्यविन्यास का उपयोग करके एक सेट ऑपरेटर युक्त SELECT को लपेटें और इसके शीर्ष पर एक्सएमएल के लिए आवेदन करें।STUFF/XML पथ

मैं जब मैं इस चलाने इस त्रुटि मिलती है:

SELECT 
    STUFF((
    SELECT 1 
    UNION ALL 
    SELECT 2 
    FOR XML PATH('') 
    ),1,0,'') [COLUMN] 

ठीक काम करता है जब मैं इस चलाने (संघ सभी के बिना)

SELECT 
    STUFF((
    SELECT 1 
    FOR XML PATH('') 
    ),1,0,'') [COLUMN] 
कोई सुझाव क्यों यूनिअन बिल्कुल काम नहीं करता, या कैसे

इसे STUFF() के अंदर काम करने के लिए?

उत्तर

13

इसके लिए एक आसान कामकाज है, आपको किसी अन्य चयन के साथ अपनी यूनियन क्वेरी (या उस मामले के लिए व्युत्पन्न तालिका) को लपेटना चाहिए। ऐसा करने के लिए और फिर sintax जारी रखने के लिए सामान्य रूप से:

select * from 
(
SELECT 1 as I 
UNION ALL 
SELECT 2 as J 
) as K 

कुछ इस तरह आप क्या खोज रहे हैं:

SELECT STUFF((
    select * from(

    SELECT * from dbo.Table1 as I 
    UNION ALL 
    SELECT * from dbo.Table2 as j 
    ) as k 
    FOR XML PATH('') 
    ),1,0,'') 

मैं जाँच की और यह दोषरहित

+1

काम करता है काम करने के लिए लगता है कि, धन्यवाद! –

+0

उपनाम 'I' और 'J' के लिए क्या हैं? – alzaimar

+1

मुझे विश्वास है कि उनकी आवश्यकता नहीं है, मैंने उन्हें बस मामले में रखा है। यदि आप उन्हें डालते हैं तो आप भविष्य में संदर्भों में तालिका dbo.Table1 को j के रूप में संदर्भित कर सकते हैं। हालांकि, के लिए इसकी आवश्यकता है क्योंकि यदि वहां नहीं थे, तो उस सबक्वायरी के कॉलम को संदर्भित करने का कोई तरीका नहीं होगा। – Gaspa79

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