как обновить имя элемента в столбце xml на сервере sql

У меня есть столбец xml в моей таблице, например:

   <info>
      <teacher>     
            <name>John</name>   
      </teacher>
      <StInfo>
        <name>William</name>    
        <address>India</address>    
      </StInfo>
    </info>

Я должен просто обновить до

 <info>
          <teacher>     
                <name>John</name>   
          </teacher>
          <Student>
            <name>William</name>    
            <address>India</address>    
          </Student>
        </info>

person donstack    schedule 13.11.2013    source источник


Ответы (2)


Я построил для вас пример в SQL Server, используя ваши данные:

DECLARE @StackExample TABLE (
     Id UNIQUEIDENTIFIER NOT NULL PRIMARY KEY DEFAULT(NEWID())
    ,XmlColumn XML
)

INSERT INTO @StackExample(XmlColumn) VALUES('<info>
  <StInfo>
    <name>William</name>    
    <address>India</address>    
  </StInfo>
</info>')


UPDATE T
SET XmlColumn = XmlColumn.query('<info>
  <Student>
  {info/StInfo/*}
  </Student>
</info>')
FROM @StackExample t

SELECT * FROM @StackExample

Я надеюсь, что это может помочь

person Roberto Conte Rosito    schedule 13.11.2013
comment
это работает, но извините, я не дал полную структуру xml, так как есть некоторые другие элементы на уровне ‹stinfo›, которые удаляются после выполнения, я обновил рассматриваемый xml - person donstack; 13.11.2013
comment
Вы просто добавляете {info/teacher} перед тегом ‹Student› в заявлении об обновлении, и все готово. Извините, но я не могу проверить это, но я хочу отправить вам быстрый ответ, чтобы дать вам возможность попробовать изменения. - person Roberto Conte Rosito; 13.11.2013

Насколько я знаю, невозможно изменить имена элементов xml с помощью SQL DML. Вы можете заменить его после преобразования в varchar:

update Table1 set
    data = cast(
      replace(
        replace(
          cast(data as nvarchar(max)),
        '</StInfo>', '</Student>'
        ),
      '<StInfo>', '<Student>'
      )
    as xml)

Или вы можете восстановить свой xml с помощью XQuery:

update Table1 set
    data = data.query('<info>{
                for $i in info/StInfo
                return element Student {$i/*}
                }</info>'
    )

Эти подходы будут работать даже для нескольких элементов.

демонстрация скрипки sql

person Roman Pekar    schedule 13.11.2013