SQL XML Вставка нескольких элементов - PullRequest
1 голос
/ 29 марта 2012

Пожалуйста, помогите!У меня есть поле 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>

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Вы можете воссоздать свой XML, например ::10000

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>
')
0 голосов
/ 30 марта 2012

Адаптация ответа , предоставленного Кирилл Полищук , к новой структуре 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>
')
...