0

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

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

希望一切都有意义,任何帮助表示赞赏。

谢谢

4

1 回答 1

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
于 2013-04-10T02:13:41.593 回答