fiv*_*nts 32 xml t-sql xquery sql-server-2008
我有一个表,T1,在SQL Server 2008上有一个XML列,EventXML.我想查询某些节点包含特定值的所有行.更好,我想在不同的节点中检索值.表T1:
T1:
   EventID, int
   EventTime, datetime
   EventXML, XML
这是一个示例XML层次结构:
<Event>
   <Indicator>
      <Name>GDP</Name>
   </Indicator>
   <Announcement>
      <Value>2.0</Value>
      <Date>2012-01-01</Date>
   </Announcement>
</Event>
mar*_*c_s 63
这个怎么样?
SELECT 
    EventID, EventTime,
    AnnouncementValue = t1.EventXML.value('(/Event/Announcement/Value)[1]', 'decimal(10,2)'),
    AnnouncementDate = t1.EventXML.value('(/Event/Announcement/Date)[1]', 'date')
FROM
    dbo.T1
WHERE
    t1.EventXML.exist('/Event/Indicator/Name[text() = "GDP"]') = 1
它将找到/Event/Indicator/Name等于的所有行,GDP然后它将显示那些行<Announcement>/<Value>和<Announcement>/<Date>那些行.
请参阅SQLFiddle演示
DECLARE @t XML = '
<Event>
   <Indicator>
      <Name>GDP</Name>
   </Indicator>
   <Announcement>
      <Value>2.0</Value>
      <Date>2012-01-01</Date>
   </Announcement>
</Event>
<Event>
   <Indicator>
      <Name>Other</Name>
   </Indicator>
   <Announcement>
      <Value>3.0</Value>
      <Date>2012-01-01</Date>
   </Announcement>
</Event>
'
SELECT  node.value('.', 'NUMERIC(20, 2)')
FROM    @t.nodes('/Event[Indicator/Name/node()=''GDP'']/Announcement/Value') t(node)
| 归档时间: | 
 | 
| 查看次数: | 70303 次 | 
| 最近记录: |