我的表aa,里面的字段:linkman为xml类型的
xml格式
<Root>
<Content>
<Line>
<name>张三</name>
<age>25</age>
</Line>
<Line>
<name>李四</name>
<age>26</age>
</Line>
</Content>
</Root>
现在要用sql语句显示
name        age
张三          25
李四          26
请问怎么写?

解决方案 »

  1.   

    declare @xml xml
    set @xml='
    <Root>
    <Content> 
    <Line> 
    <name> 张三 </name> 
    <age> 25 </age> 
    </Line> 
    <Line> 
    <name> 李四 </name> 
    <age> 26 </age> 
    </Line> 
    </Content>
    </Root>'select [name]=x.query('name').value('(name)[1]', 'varchar(32)')
    , age=x.query('age').value('(age)[1]', 'int')
    from @xml.nodes('//Root/Content/Line') t(x)/*
    name                             age
    -------------------------------- -----------
     张三                              25
     李四                              26(2 row(s) affected)
    */
      

  2.   

    select EXTRACTVALUE(linkman,'//name/text()'),EXTRACTVALUE(linkman,'//age/text()') FROM aa
      

  3.   

    SELECT
    T.c.value('name[1]' ,'NVARCHAR(50)') AS NAME ,T.c.value('age[1]' ,'NVARCHAR(50)') AS AGE
    FROM
    aa
    CROSS APPLY
    [linkman].nodes('//Line) as T(C)
      

  4.   

    写法还是挺多的熊的答案已经是正确的了.4,5楼的也对.
    SELECT x.query('name/text()') name,x.query('age/text()') age FROM @xml.nodes('//Line') t(x)