是否有某种方法可以在Sql Server查询的select子句中从XML列转换/投影XML?
让我们说我们有一个表ID:Guid,Data:XML。
我们可以说“数据”栏中有以下数据:
<Order>
<Details>
<Detail>
<Quantity>10</Quantity>
<ItemPrice>20</Quantity>
</Detail>
<Detail>
<Quantity>10</Quantity>
<ItemPrice>20</Quantity>
</Detail>
</Details>
</Order>
有没有办法将这个(使用select + xquery)投射到例如:
<Order>
<Details>
<Detail>
<LineTotal>200</LineTotal>
</Detail>
<Detail>
<LineTotal>200</LineTotal>
</Detail>
</Details>
</Order>
我对如何在我的应用程序的内存中完成这项工作不感兴趣,我想在sql查询的select子句中进行服务器端转换。
答案 0 :(得分:5)
准确生成所需的输出,但SQL Server XML非常有限。在这个例子中,你真的需要知道如何(重新)生成整个树 - 使用“手动编码”变体。
declare @tbl table (id uniqueidentifier, data xml)
insert @tbl select newid(), '
<Order>
<Details>
<Detail>
<Quantity>10</Quantity>
<ItemPrice>20</ItemPrice>
</Detail>
<Detail>
<Quantity>10</Quantity>
<ItemPrice>20</ItemPrice>
</Detail>
</Details>
</Order>'
select ((
select d.d.value('(Quantity)[1]','int') * d.d.value('(ItemPrice)[1]','int') [LineTotal]
from ds.ds.nodes('Detail') d(d)
for xml path('Detail'), type)) Details
from @tbl t
cross apply data.nodes('Order/Details') ds(ds)
for xml path('Order')