2013-04-09 101 views
0

我寫在SQL查詢數據的幾桌相結合,並已得到了一個在那裏它被存儲在XML的格式如下:獲得價值SQL

<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是存儲在一個表,我已成功使用下面的代碼

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 

我想知道是否有這樣做的更好的方式,也如果有一種方法可以保證得到Address Provided場我會得到地址提供字段,即使它首先出現或如果re是其他領域的前面。

希望這一切都有道理,任何幫助表示讚賞。

感謝

回答

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