我在SQL中编写一个查询来组合几个数据表,并且以一种格式存储在XML中,格式如下:
<CustomDetails xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Fields>
<Field>
<Name>Selected City</Name>
<Value>Central</Value>
</Field>
<Field>
<Name>Address Provided</Name>
<Value>New Address</Value>
</Field>
</Fields>
</CustomDetails>
XML存储在表格中,我已设法使用以下代码获取Address Provided
字段
select
o.OrderID,
od.CustomDetails.query('data(/CustomDetails/Fields/Field[2]/Value)') as 'Address Provided'
from
dbo.[Order] o on
o.OrderID = s.OrderID
join
dbo.OrderData od on
od.OrderID = o.OrderID
我想知道是否有更好的方法可以做到这一点,并且如果有办法保证我将获得地址提供字段,即使它首先出现或者前面还有其他字段。
希望一切都有意义,感谢任何帮助。
由于
答案 0 :(得分:1)
经过一番研究后,我设法找到了解决方案。
select
o.OrderID,
cast(od.CustomDetails.query('
for $CD in /CustomDetails/Fields/Field,
$Name in $CD/Name
where contains($Name, "Address Provided")
return data($CD/Value)
') as varchar(50)) as addressProvided
from
dbo.[Order] o on
o.OrderID = s.OrderID
join
dbo.OrderData od on
od.OrderID = o.OrderID