我想将表中的记录转换为sql server中的xml,如下所示

时间:2015-04-29 11:15:21

标签: sql-server xml

我想将表中的记录转换为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记录。

2 个答案:

答案 0 :(得分:0)

查看FOR XML (SQL Server)

  

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

SQL Fiddle DEMO

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