我遇到的问题是从表格中保存数据,如下面的xml
ID personID Type Name category value
1 1234 xtype John abc 200
2 1234 ytype John xyz 230
3 1234 ztype John ccc 220
4 2222 xtype Jim abc 200
我需要在xml中保存以上数据 条件。
personId 1234的数据具有3行数据,具有三种不同类型(x,yz),因此所有这三行数据应保存在一个xml数据类型中,>具有不同personID 2222的列应存储在下一行中,它只有一个类型(x),因此它只有一次。
必需的xml示例
<Data>
<PersonID>1234</PersonID>
<SpecifiedType>
<Type>xtype</Type>
<Name>John</Name>
<category>abc</category>
<value>200</Value>
</SpecifiedType>
<SpecifiedType>
<Type>Ytype</Type>
<Name>John</Name>
<category>xyz</category>
<value>230</Value>
</SpecifiedType>
<SpecifiedType>
<Type>Ztype</Type>
<Name>John</Name>
<category>ccc</category>
<value>220</Value>
</SpecifiedType>
</Data>
根据应分组的类型,有时personID只有一个Type。
我能够将一行数据生成到xml中,但无法以上述格式存储它。
答案 0 :(得分:0)
您可以使用FOR XML执行此操作。为了获得你想要的分组和结构涉及几层,但这并不太难;
declare @t table (ID int, PersonID int, Type varchar(10), Name varchar(10), category varchar(10), value int)
insert @t values
(1, 1234, 'xtype', 'John', 'abc', 200),
(2, 1234, 'ytype', 'John', 'xyz', 230),
(3, 1234, 'ztype', 'John', 'ccc', 220),
(4, 2222, 'xtype', 'Jim', 'abc', 200)
; with cte
as (
select distinct PersonID from @t
)
select
(select
PersonID,
(select
Type,
Name,
category,
value
from
@t t
where
t.PersonID = cteInner.PersonID
for xml path('SpecifiedType'), type )
from
cte cteInner
where
cteInner.PersonID = cteOuter.PersonID
for xml path(''), type, root('data') )
from
cte cteOuter