我想将表中的记录转换为sql server中的XML,如下所示。
表
countryid stateid siteid value
1 1 1 11
1 1 2 22
1 2 1 55
1 2 2 66
2 1 1 111
2 1 2 222
2 2 1 555
2 2 2 666
3 1 1 100
3 1 2 200
3 2 1 500
3 2 2 600
我想将此数据转换为XML,如下所示。
<data>
<countrydata>
<countryid> 1 </countryid>
<stateid> 1 </stateid>
<siteid> 1 </siteid>
<value> 11 </value>
</countrydata>
<countrydata>
<countryid> 1 </countryid>
<stateid> 1 </stateid>
<siteid> 2 </siteid>
<value> 22 </value>
</countrydata>
<countrydata>
<countryid> 1 </countryid>
<stateid> 2 </stateid>
<siteid> 1 </siteid>
<value> 55 </value>
</countrydata>
<countrydata>
<countryid> 1 </countryid>
<stateid> 2 </stateid>
<siteid> 2 </siteid>
<value> 66 </value>
</countrydata>
</data>
这个XML是我对countryid = 1 ..
的记录的期望同样,我需要具有不同countryid的不同XML记录。
答案 0 :(得分:0)
SELECT查询将结果作为行集返回。你可以选择 通过指定FOR,将SQL查询的正式结果检索为XML 查询中的XML子句。
另外,请查看Use RAW Mode with FOR XML上的示例,更具体地说是
像
这样的东西SELECT [countryid], [stateid], [siteid], [value]
FROM Table1
FOR XML RAW ('countrydata'), ELEMENTS, ROOT ('data')
答案 1 :(得分:0)
如果您希望每XML
countryid
,则应基于GROUP
countryid
您的数据,然后使用共同相关的子查询来获取xml
1}}对于那个使用类似的东西。
;WITH yourtable as (
select 1 as countryid,1 as stateid,1 as siteid,1 as value
UNION ALL
select 2 as countryid,1 as stateid,1 as siteid,1 as value
)
SELECT countryid, (SELECT countryid,stateid,siteid,value
FROM yourtable t2
WHERE t2.countryid = t1.countryid
FOR XML PATH('countrydata'),ROOT('data'),ELEMENTS,TYPE) as xmlval
FROM yourtable t1
GROUP BY countryid