2011-03-07 61 views
4

特别是,如果在一个名为元数据的列中给出以下XML内容,如何检索具有特定名称属性的节点的值?SQL 2008从XML列中检索属性值

在这种情况下与int16_t标签和 'filterIndex'

<root version="1"> 
    <class derived_type="FilterInfo" name="FilterInfo"> 
    <string name="filterName" length="3" value="mt8" /> 
    <string name="filterText" length="3" value="SVR" /> 
    <string name="filterTable" length="11" value="CML_5_1_mt8" /> 
    <bool name="userDefined" value="true" /> 
    <bool name="multiResp" value="false" /> 
    <enumeration name="filterType" value="1" /> 
    <enumeration name="filterCategory" value="1" /> 
    <vector name="options" count="1"> 
     <class derived_type="OptionInfo" name="V0"> 
     <int16_t name="optionIndex" value="1" /> 
     <string name="optionName" length="3" value="mt8" /> 
     <string name="optionText" length="3" value="SVR" /> 
     <string name="optionTable" length="11" value="CML_5_1_mt8" /> 
     </class> 
    </vector> 
    <GUID name="primaryKey" value="fe66b60f-468a-4f0e-be80-0055e20baa35" /> 
    <int16_t name="filterIndex" value="1080" /> 
    </class> 
</root> 

THX ++

杰里名字关联的值之后我。

回答

5

这样的事情?

SELECT 
    metadata.value('(/root/class/int16_t/@value)[1]', 'int') AS 'int16_value' 
FROM 
    dbo.YourTable 
+0

靶心。 THX ++。 – 2011-03-07 16:55:41

+0

这很方便,因为在查询路径中只有一个标记名为“int16_t”的元素。如果你想要'name'属性== filterName的'string'元素呢? – 2012-12-03 11:25:23