2012-03-29 5 views
1

Пожалуйста, помогите! У меня есть поле xml в базе данных. Я пытаюсь вставить новый элемент для каждого элемента в поле. Например:SQL XML Вставка нескольких элементов

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

бы вставить элемент с и перейти к:

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

Я знаю, что могу использовать @ fieldname.modify ('вставить @CElement в (/ некоторые-элемент) [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> 

ответ

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> 
') 
+0

Я попытался это решение несколькими способами, хотя я не могу заставить его работать на моих данных! Полное описание данных показано в сообщении ниже - Спасибо! – user1301537

0

адаптируя answer обеспечивается Kirill Polishchuk к новой структуре 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> 
') 
Смежные вопросы