代码之家  ›  专栏  ›  技术社区  ›  Beska

从Sql Server列中的XML提取数据

  •  3
  • Beska  · 技术社区  · 16 年前

    declare @Table as table(id char(1), datacolumn xml)
    
    insert into @table
    select 'a', '<root><vnode v="5" /><vnode v="8" /></root>'
    
    insert into @table
    select 'b', '<root><vnode v="7" /></root>'
    
    
    id   datacolumn
    ---  -----------------------------------------
    a    <root><vnode v="5" /><node v="8" /></root>
    b    <root><vnode v="7" /></root>
    

    因此,我想提出一个查询,它将返回以下内容:

    id   data
    ---  ----
    a    5
    a    8
    b    7
    

    select id, T.c.value('node[1]', 'varchar(100)') mdata
    from @table
    cross apply datacolumn.nodes('/root') AS T(c)
    

    问题:

    1. 还有,因为我有[1],所以我得到了第一个节点……但我想要所有节点……但还没有找到这个概念。
    1 回复  |  直到 16 年前
        1
  •  6
  •   Quassnoi    16 年前
    SELECT  id, T.c.value('@v', 'NVARCHAR(MAX)')
    FROM    @table
    CROSS APPLY
            datacolumn.nodes('/root/vnode') AS T(c)
    

    这个 datacolumn.nodes('/root/vnode') 返回的所有实例 /root/vnode XML .

    有 2 其中 a 和 1 在里面 b .

    value() XPath

    由于要返回相关节点的属性值,只需在属性名称前面加上 @