Select For XML PATH(). Вложенные даные

Slavalp93
Дата: 28.04.2015 13:40:09
Доброго времени суток!
Прошу помощи в решении вроде как простой задачи. Исходные данные:
create Table A (ID int, Name Varchar(10), SomeData int);
				
create Table B (ID int,	Value Varchar(10), SomeData int, MainID int); -- Link to A
				
Insert into A (ID, Name, SomeData) Values (1, 'Test1', 10)
Insert into A (ID, Name, SomeData) Values (2, 'Test2', 20)

Insert into B(ID, Value, SomeData, MainID) Values (1, 'Value 1', 20, 1)
Insert into B(ID, Value, SomeData, MainID) Values (2, 'Value 2', 30, 1)
Insert into B(ID, Value, SomeData, MainID) Values (3, 'Value 3', 40, 1)
Insert into B(ID, Value, SomeData, MainID) Values (4, 'Value 4', 50, 1)

Insert into B(ID, Value, SomeData, MainID) Values (5, 'Value 5', 60, 2)
Insert into B(ID, Value, SomeData, MainID) Values (6, 'Value 6', 70, 2)

Нужно получить для каждой записи в таблице A перечень значений из таблицы B в виде такого вот XML:
<Data>
  <A_ID>1</A_ID>
  <A_Name>Test1</A_Name>
  <A_SomeData>10</A_SomeData>
  <Data_From_B>
    <B_Main_ID>1</B_Main_ID>
    <B_ID>1</B_ID>
    <B_Value>Value 1</B_Value>
    <B_SomeData>20</B_SomeData>
    <B_Main_ID>1</B_Main_ID>
    <B_ID>2</B_ID>
    <B_Value>Value 2</B_Value>
    <B_SomeData>30</B_SomeData>
    <B_Main_ID>1</B_Main_ID>
    <B_ID>3</B_ID>
    <B_Value>Value 3</B_Value>
    <B_SomeData>40</B_SomeData>
    <B_Main_ID>1</B_Main_ID>
    <B_ID>4</B_ID>
    <B_Value>Value 4</B_Value>
    <B_SomeData>50</B_SomeData>
  </Data_From_B>
</Data>
<Data>
  <A_ID>2</A_ID>
  <A_Name>Test2</A_Name>
  <A_SomeData>20</A_SomeData>
  <Data_From_B>
    <B_Main_ID>2</B_Main_ID>
    <B_ID>5</B_ID>
    <B_Value>Value 5</B_Value>
    <B_SomeData>60</B_SomeData>
    <B_Main_ID>2</B_Main_ID>
    <B_ID>6</B_ID>
    <B_Value>Value 6</B_Value>
    <B_SomeData>70</B_SomeData>    
  </Data_From_B>
</Data>

Делаю вот так:
select	A.ID	as "A_ID",
A.Name		as "A_Name",
A.SomeData	as "A_SomeData",
(select B.MainID	as "B_MainID",
	B.ID		as "B_ID",
	B.Value		as "B_Value",
	B.SomeData	as "B_SomeData"
from B where B.MainID=A.ID
for xml path('')) as "Data_From_B"
from A
for xml path('Data'), type

Но получаю вот такой результат:
<Data>
  <A_ID>1</A_ID>
  <A_Name>Test1</A_Name>
  <A_SomeData>10</A_SomeData>
  <Data_From_B>&lt;B_MainID&gt;1&lt;/B_MainID&gt;&lt;B_ID&gt;1&lt;/B_ID&gt;&lt;B_Value&gt;Value 1&lt;/B_Value&gt;&lt;B_SomeData&gt;20&lt;/B_SomeData&gt;&lt;B_MainID&gt;1&lt;/B_MainID&gt;&lt;B_ID&gt;2&lt;/B_ID&gt;&lt;B_Value&gt;Value 2&lt;/B_Value&gt;&lt;B_SomeData&gt;30&lt;/B_SomeData&gt;&lt;B_MainID&gt;1&lt;/B_MainID&gt;&lt;B_ID&gt;3&lt;/B_ID&gt;&lt;B_Value&gt;Value 3&lt;/B_Value&gt;&lt;B_SomeData&gt;40&lt;/B_SomeData&gt;&lt;B_MainID&gt;1&lt;/B_MainID&gt;&lt;B_ID&gt;4&lt;/B_ID&gt;&lt;B_Value&gt;Value 4&lt;/B_Value&gt;&lt;B_SomeData&gt;50&lt;/B_SomeData&gt;</Data_From_B>
</Data>
<Data>
  <A_ID>2</A_ID>
  <A_Name>Test2</A_Name>
  <A_SomeData>20</A_SomeData>
  <Data_From_B>&lt;B_MainID&gt;2&lt;/B_MainID&gt;&lt;B_ID&gt;5&lt;/B_ID&gt;&lt;B_Value&gt;Value 5&lt;/B_Value&gt;&lt;B_SomeData&gt;60&lt;/B_SomeData&gt;&lt;B_MainID&gt;2&lt;/B_MainID&gt;&lt;B_ID&gt;6&lt;/B_ID&gt;&lt;B_Value&gt;Value 6&lt;/B_Value&gt;&lt;B_SomeData&gt;70&lt;/B_SomeData&gt;</Data_From_B>
</Data>

Помогите преобразовать мой запрос для получения нужного вида xml. Буду благодарен за любую помощь!
Кролик-зануда
Дата: 28.04.2015 13:47:02
Slavalp93,
...
for xml path(''),type) as "Data_From_B"
..
WarAnt
Дата: 28.04.2015 13:49:05
Slavalp93,

type перенесите в подзапрос.
Slavalp93
Дата: 28.04.2015 14:15:03
То что нужно! Спасибо за помощь!