2

我在 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等等,一次,独立于子节点的值和内部属性。

提前谢谢

4

1 回答 1

1

尝试这样的事情:

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

有关完整示例,请参阅此 SQL Fiddle 演示

于 2012-11-22T10:03:33.777 回答