2012-07-20 62 views
6

我想在SQL Server 2008 TSQL查詢中匹配一些XML輸出。我匹配的XML可以返回項目列表。列表由屬性名稱標識 - 而不是節點名稱。將屬性添加到由TSQL FOR XML路徑創建的ElementNode

XML路徑函數將返回一個包裝節點,但我找不到添加任何屬性到該節點的方法。在我的情況下,他們將根據我選擇運行的表名進行硬編碼。

我在那裏有'x'作爲'x'來保持兩個列表分開。在我的實際數據中,這不是一個問題,因爲它們在不同的節點中。問題是如何將屬性添加到「List」節點。

這裏是一個SQL Fiddle page for the example below

示例模式

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

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

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

樣品選擇

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 

實際輸出

<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> 

所需的輸出:(添加「N AME」屬性列表中包裝。)

<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才能將屬性添加到節點上: