2012-07-20 2 views
6

나는 SQL 서버 2008 TSQL 쿼리의 일부 XML 출력을 일치하려고위한 TSQL 만든 ElementNode합니다. 일치하는 XML은 List 목록을 반환 할 수 있습니다. 목록은 노드 이름이 아닌 속성 이름으로 식별됩니다.추가 속성은 XML 경로

는 XML 경로 함수는 래퍼 노드를 반환하지만 해당 노드에 어떤 속성을 추가 할 수있는 방법을 찾을 수 없습니다. 내 경우에는 그들이 선택하는 테이블 이름에 따라 하드 코딩 된 값이됩니다.

나는 분리 된 두 개의 목록을 유지하기 위해 거기에 'X'로 'X'를 가지고있다. 내 실제 데이터에서는 다른 노드에있는 것과 같이 문제가되지 않습니다. 문제는 "List"노드에 속성을 추가하는 것입니다.

샘플 스키마

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 추가 여기

SQL Fiddle page for the example below입니다 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

올바른 결과를 얻으려면 나타납니다. List 노드에 속성을 가져 오려면 XML PATH 중첩 수준이 필요합니다.