2013-11-13 4 views
1

У меня есть столбец XML в моей таблице, как следующее:как обновить имя элемента в столбце XML в SQL сервере

<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> 

ответ

4

Я построил пример для вас в 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 

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

+0

это работает, но жаль, что я не дал полную структуру XML, поскольку есть некоторые другие elemts тоже на уровне, которые удаляются после выполнения, я обновил XML в вопросе – donstack

+1

Вы просто добавляете {info/teacher} перед тегом в инструкции обновления и все сделано. Извините, но я не могу проверить это, но я хочу отправить вам быстрый ответ, чтобы дать вам изменения, чтобы попробовать. –

0

Насколько я знаю, нет способа изменить имена элементов 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>' 
    ) 

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

sql fiddle demo

 Смежные вопросы

  • Нет связанных вопросов^_^