使用sql从特定的xml名称值对获取值

时间:2013-04-09 23:59:57

标签: sql xml

我在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

我想知道是否有更好的方法可以做到这一点,并且如果有办法保证我将获得地址提供字段,即使它首先出现或者前面还有其他字段。

希望一切都有意义,感谢任何帮助。

由于

1 个答案:

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