我在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
答案 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获取完整示例。