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

在SQL Server上将XML的一个子集从一列复制到另一列

  •  0
  • stannius  · 技术社区  · 14 年前

    我有一个表(在sqlserver05上)有一个xml列。该列的格式类似于:

    <doc>
       <field name="a">foo</field>
       <field name="b">bar</field>
       <field name="c">fizz</field>
       <field name="d">buzz</field>
    </doc>
    

    我想将该XML的一个子集复制到一个新的XML列,例如:

    <doc>
       <field name="a">foo</field>
       <field name="c">fizz</field>
    </doc>
    

    我该怎么做?

    编辑:这是对我有效的(基于接受的答案)

    UPDATE tbl
    SET xml_SubColumn = 
        xml_Column.query('<doc>{//field[@name="a" or @name="c"]}</doc>')
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   Remus Rusanu    14 年前

    使用XQuery:

    declare @x xml;
    set @x = '<doc>
       <field name="a">foo</field>
       <field name="b">bar</field>
       <field name="c">fizz</field>
       <field name="d">buzz</field>
    </doc>';
    
    select @x.query('<doc>{//field[@name="a" or @name="c"]}</doc>');
    

    在您的示例中,将xquery应用于xml列。当然,根据您的具体情况调整xquery,我的表达式只是一个假设您的条件是 @name='a' or @name='b' .