sql-xml:选择节点集合

时间:2012-11-22 09:47:33

标签: sql xml sql-server-2008-r2

我在SQL Server 2008 R2中有一个表,它有一个xml列。

以下是其中的xml文档示例:

<ROOT>
  <SITE_CHAR>
    <SITE_NAME>ScrivaniaEle</SITE_NAME>
    <SITE_RESPONSIBLE>database</SITE_RESPONSIBLE>
    <SITE_IGBP>URB</SITE_IGBP>
    <SITE_LAT>42.42716</SITE_LAT>
    <SITE_LON>12.09358</SITE_LON>
    <ELEVATION>323</ELEVATION>
  </SITE_CHAR>
  <SPP_O>
    <VALUE>BRNA</VALUE>
    <SPP_DATE>20090409</SPP_DATE>
  </SPP_O>
  <SPP_O>
    <VALUE>HEAN3</VALUE>
    <SPP_DATE>20090409</SPP_DATE>
  </SPP_O>
  <SPP_O>
    <VALUE>TRIN3   </VALUE>
    <SPP_DATE>20091111</SPP_DATE>
  </SPP_O>
  <SPP_U>
    <VALUE>HEAN3</VALUE>
    <SPP_DATE>20090409</SPP_DATE>
  </SPP_U>
  <SPP_U>
    <VALUE>TRIN3   </VALUE>
    <SPP_DATE>20091111</SPP_DATE>
  </SPP_U>
  <LAI>
    <VALUE>0.35863933908505</VALUE>
    <LAI_DATE>20080319</LAI_DATE>
    <LAI_COMMENT>"number of samples: 14"</LAI_COMMENT>
    <LAI_TECHNIQUE>"ACUPAR"</LAI_TECHNIQUE>
  </LAI>
</ROOT>

我想知道是否有办法只选择第一个子节点而只选择一次;也就是说,我想一次检索值SITE_CHAR, SPP_O, LAI等等,独立于子节点的值和内部属性。

提前

thanx

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

SELECT 
    NodeName = XmlRoot.value('local-name(.)', 'varchar(50)')
FROM
    dbo.YourTable
CROSS APPLY 
    XmlContent.nodes('/ROOT/*') AS Tbl(XmlRoot)

See this SQL Fiddle demo获取完整示例。