2012-07-20 9 views
6

के लिए TSQL द्वारा बनाए गए ElementNode में विशेषता जोड़ें I SQL Server 2008 TSQL क्वेरी में कुछ XML आउटपुट से मिलान करने का प्रयास कर रहा हूं। मैं जो एक्सएमएल मेल कर रहा हूं वह वस्तुओं की सूची वापस कर सकता है। सूचियां विशेषता नाम द्वारा पहचानी जाती हैं - नोड नाम नहीं।XML पथ

एक्सएमएल पथ फ़ंक्शन एक रैपर नोड वापस कर देगा लेकिन मुझे उस नोड में कोई भी विशेषता जोड़ने का कोई तरीका नहीं मिल रहा है। मेरे मामले में वे टेबल नाम के आधार पर हार्ड कोड किए गए मान होंगे जिन्हें मैं चला रहा हूं।

मेरे पास दो सूचियों को अलग रखने के लिए 'x' के रूप में 'x' है। मेरे वास्तविक डेटा में यह कोई समस्या नहीं है क्योंकि ये अलग-अलग नोड्स में हैं। समस्या यह है कि "सूची" नोड में जोड़े गए गुण कैसे प्राप्त करें। जोड़ना "N (:

नमूना स्कीमा

create table Table1 (Value varchar(50)); 
create table Table2 (Value varchar(50)); 

insert Table1 values 
('A'), ('B'), ('C'); 

insert Table2 values 
('X'), ('Y'), ('Z'); 

नमूना वास्तविक उत्पादन

<row> 
    <List> 
    <L I="A"/> 
    <L I="B"/> 
    <L I="C"/> 
    </List> 

    <x>x</x> 

    <List> 
    <L I="X"/> 
    <L I="Y"/> 
    <L I="Z"/> 
    </List> 
</row> 

वांछित आउटपुट का चयन करें

select 
(
select Value as '@I' 
from Table1 
for XML PATH('L'), TYPE 
) as List, 
'x' as 'x', -- needed to keep the Lists apart. 
(
select Value as '@I' 
from Table2 
for XML PATH('L'), TYPE 
) as List 

for XML PATH 

:

यहाँ एक SQL Fiddle page for the example below है एएम "सूची रैपर में विशेषता।)

<row> 
    <List Name='Table1'> <!-- Added Attribute "Name" here --> 
    <L I="A"/> 
    <L I="B"/> 
    <L I="C"/> 
    </List> 

    <x>x</x> 

    <List Name='Table2'> <!-- Added Attribute "Name" here --> 
    <L I="X"/> 
    <L I="Y"/> 
    <L I="Z"/> 
    </List> 
</row> 

उत्तर

5

यह सही आउटपुट देने लगता है। XML PATH घोंसले का एक अतिरिक्त स्तर List नोड:

SELECT 
(SELECT 'Table1' AS '@name', 
    (SELECT Value AS '@I' 
    FROM Table1 
    FOR XML PATH ('L')) 
FOR XML PATH('List'), TYPE) 
,'x' AS'x' 
,(SELECT 'Table2' AS '@name', 
    (SELECT Value AS '@I' 
    FROM Table2 
    FOR XML PATH ('L')) 
FOR XML PATH('List'), TYPE 
) 

FOR XML PATH; 
पर विशेषता प्राप्त करने के लिए आवश्यक है