2012-11-22 59 views
2

我在SQL Server 2008 R2中有一个表,它有一个xml列。sql-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

看一看[使用T-SQL读取XML文件的简单示例](http://blog.sqlauthority.com/2009/02/13/sql-server-simple-example-of-reading-xml-file -using-t-sql /) –

回答

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为一个完整的例子。

+0

太棒了!它完美的作品 非常感谢 – bitdiego