[英]T-SQL convert xml field to multi column table
我试图将数据从xml字段转换为表。 我在这个网站上找到了多个解决方案,但它们似乎都没有给我我所需要的。 xml看起来像这样:
<table>
<id>{100}</id>
<rows>
<row>
<columns>
<column name="cur" value="EUR" type="System.String" />
<column name="item" value="Item a" type="System.String" />
<column name="price" value="2.5" type="System.Decimal" />
<column name="qty" value="20" type="System.Int32" />
<column name="Key" value="1" type="System.Int32" />
</columns>
</row>
<row>
<columns>
<column name="cur" value="EUR" type="System.String" />
<column name="item" value="Item b" type="System.String" />
<column name="price" value="30" type="System.Decimal" />
<column name="qty" value="30" type="System.Int32" />
<column name="Key" value="2" type="System.Int32" />
</columns>
</row>
</rows>
<key>Key</key>
</table>
我希望结果看起来像这样:
id key cur item price qty
100 1 EUR Item a 2.5 20
100 2 EUR Item b 30 30
我希望有一个人可以帮助我。
试试这样:
DECLARE @x XML=
'<table>
<id>{100}</id>
<rows>
<row>
<columns>
<column name="cur" value="EUR" type="System.String" />
<column name="item" value="Item a" type="System.String" />
<column name="price" value="2.5" type="System.Decimal" />
<column name="qty" value="20" type="System.Int32" />
<column name="Key" value="1" type="System.Int32" />
</columns>
</row>
<row>
<columns>
<column name="cur" value="EUR" type="System.String" />
<column name="item" value="Item b" type="System.String" />
<column name="price" value="30" type="System.Decimal" />
<column name="qty" value="30" type="System.Int32" />
<column name="Key" value="2" type="System.Int32" />
</columns>
</row>
</rows>
<key>Key</key>
</table>';
SELECT @x.value('(/table/id)[1]','varchar(max)') AS id --are the curly brackets there on purpose?
,Rw.value('(columns/column[@name="Key"]/@value)[1]','int') AS [key]
,Rw.value('(columns/column[@name="cur"]/@value)[1]','varchar(max)') AS cur
,Rw.value('(columns/column[@name="item"]/@value)[1]','varchar(max)') AS item
,Rw.value('(columns/column[@name="price"]/@value)[1]','decimal(10,4)') AS price
,Rw.value('(columns/column[@name="qty"]/@value)[1]','int') AS qty
FROM @x.nodes('/table/rows/row') AS A(Rw)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.