【问题标题】:SQL XML Insert multiple elementsSQL XML 插入多个元素
【发布时间】:2023-04-03 20:36:01
【问题描述】:

请帮忙!我在数据库中有一个 xml 字段。我正在尝试为字段中的每个元素插入一个新元素。例如:

<some-element>
<a> </a>
<b> </b>
</some-element>
<some-element>
<a> </a>
<b> </b>
</some-element>

将插入元素 c 并转到:

<some-element>
<a> </a>
<b> </b>
<c> </c>
</some-element>
<some-element>
<a> </a>
<b> </b>
<c> </c>
</some-element>

我知道我可以使用 @fieldname.modify('insert @CElement into (/some-element)[1]') 但这只会改变第一个元素!我想对所有元素重复此操作。

任何帮助将不胜感激! (我使用的是 SQL Server 2008)

从答案中移出:

感谢您的回复!如果我更具体一点,也许会有所帮助......我在 xml 中描述了一个简单的数据表。我正在尝试添加一个新列。我可以在列描述中添加列,但我需要将列元素添加到所有行。 (改变结构不是一件容易的事,我想避免这种情况!)例如:

<Table> 
   <Columns> 
      <Column ID="0"> 
      <Column-Name>0NAME</Column-Name>
      </Column> 
      <Column ID="1"> 
      <Column-Name>1NAME</Column-Name> 
      </Column> 
      <Column ID="2"> 
      <Column-Name>2NAME</Column-Name> 
      </Column> 
      <Column ID="3"> 
      <Column-Name>!!!! THIS COLUMN IS BEING ADDED !!!!!</Column-Name> 
      </Column> 
   </Columns>
 <Rows>
        <Row ID="0">
          <C ID="0">0 contents here</C>
          <C ID="1">0 contents here</C>
          <C ID="2">0 contents here</C>
          <!-- NEW COLUMN NEEDS TO BE CREATED HERE -->
         </Row>
        <Row ID="1">
          <C ID="0">1 contents here</C>
          <C ID="1">1 contents here</C>
          <C ID="2">1 contents here</C>
          <!-- NEW COLUMN NEEDS TO BE CREATED HERE -->
        </Row>
    <Row ID="2">
          <C ID="0">2 contents here</C>
          <C ID="1">2 contents here</C>
          <C ID="2">2 contents here</C>
          <!-- NEW COLUMN NEEDS TO BE CREATED HERE -->
        </Row>
</Rows>
</Table>

【问题讨论】:

    标签: sql-server xml sql-server-2008 xpath xquery


    【解决方案1】:

    您可以重新创建您的 XML,例如:

    declare @x xml = '<some-element>
    <a>1</a>
    <b>2</b>
    </some-element>
    <some-element>
    <a>3</a>
    <b>4</b>
    </some-element>'
    
    select @x.query
    ('
       for $e in some-element
       return
         <some-element>
          { $e/a }
          { $e/b }
          <c/>
         </some-element>
    ')
    

    【讨论】:

    • 我已经以多种方式尝试了这个解决方案,但我无法让它为我的数据工作!数据的完整描述显示在下面的帖子中 - 谢谢!
    【解决方案2】:

    使Kirill Polishchuk提供的answer适应新的XML结构:

    select @XML.query
    ('
       for $c in Table/Columns
       return
         <Table>
           <Columns>
             { $c/* }
           </Columns>
           <Rows>
             { 
               for $r in Table/Rows/Row
               return
                 <Row>
                   { $r/* }
                   <C ID="3"/>
                 </Row>
             }
           </Rows>
         </Table>
    ')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      相关资源
      最近更新 更多