Обновление определенного столбца в таблице с XML с использованием SQL - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь обновить определенный столбец в таблице, содержащей несколько пространств имен. Моя структура таблицы:

+------+---------+-----------------------------------------------------------------------+
| cid  | cidtype |                               xml_data                                |
+------+---------+-----------------------------------------------------------------------+
| 1001 | N       | <Main  xmlns:json=""http://www.samplenamespace.com/json"" >           |
|      |         | <ID json:ValueType=""Number"">1001</ID>                               |
|      |         | <details>                                                             |
|      |         | <name xmlns:json=""http://www.samplenamespace.com/json"">John</name>  |
|      |         | <age  xmlns:json=""http://www.samplenamespace.com/json"">12</age>     |
|      |         | </details>                                                            |
|      |         | </Main>                                                               |
| 1003 | N       | <Main  xmlns:json=""http://www.samplenamespace.com/json"" >           |
|      |         | <ID json:ValueType=""Number"">1003</ID>                               |
|      |         | <details>                                                             |
|      |         | <name xmlns:json=""http://www.samplenamespace.com/json"">Diane</name> |
|      |         | <age  xmlns:json=""http://www.samplenamespace.com/json"">25</age>     |
|      |         | </details>                                                            |
|      |         | </Main>                                                               |
| 1004 | N       | <Main  xmlns:json=""http://www.samplenamespace.com/json"" >           |
|      |         | <ID json:ValueType=""Number"">1004</ID>                               |
|      |         | <details>                                                             |
|      |         | <name xmlns:json=""http://www.samplenamespace.com/json"">Kippy</name> |
|      |         | <age  xmlns:json=""http://www.samplenamespace.com/json"">26</age>     |
|      |         | </details>                                                            |
|      |         | </Main>                                                               |
+------+---------+-----------------------------------------------------------------------+

В этой таблице я хочу изменить столбец xml_data, чтобы удалить пространства имен http://www.samplenamespace.com/json для всех подузлов, кроме узла <Main>.

Мой запрос:

update #final --#final is my table
set xml_data.modify(replace('xmlns:json="http://www.samplenamespace.com/json"',' ','') where.... ) -- I don't know to access the root node here

Любая помощь?

1 Ответ

0 голосов
/ 02 июля 2018

Поскольку у вас есть два элемента, которые необходимо очистить, вы можете использовать sql replace в столбце xml_data, чтобы удалить пространство имен из элемента name, а затем элемента age. Это оставит основной элемент как есть с требуемым пространством имен.

Как заменить строку в столбце таблицы SQL Server

create   TABLE [dbo].[foo]
(
cid int not null,
cidtype varchar(1) null,
xml_data varchar(max) null
)
go

insert into foo (cid,cidtype,xml_data) values
(1001,'N','<Main  xmlns:json=""http://www.samplenamespace.com/json"" >           
 <ID json:ValueType=""Number"">1001</ID>                               
 <details>                                                             
 <name xmlns:json=""http://www.samplenamespace.com/json"">John</name>  
 <age  xmlns:json=""http://www.samplenamespace.com/json"">12</age>     
 </details>                                                            
 </Main>')


 insert into foo (cid,cidtype,xml_data) values (1003, 'N',
 '<Main  xmlns:json=""http://www.samplenamespace.com/json"" >            
  <ID json:ValueType=""Number"">1003</ID>                                
  <details>                                                              
  <name xmlns:json=""http://www.samplenamespace.com/json"">Diane</name>  
  <age  xmlns:json=""http://www.samplenamespace.com/json"">25</age>      
  </details>                                                             
  </Main>')
  insert into foo (cid,cidtype,xml_data) values (1004,'N',
  '<Main  xmlns:json=""http://www.samplenamespace.com/json"" >            
 <ID json:ValueType=""Number"">1004</ID>                                
 <details>                                                              
 <name xmlns:json=""http://www.samplenamespace.com/json"">Kippy</name>  
 <age  xmlns:json=""http://www.samplenamespace.com/json"">26</age>      
 </details>                                                             
 </Main>')
 go
 select * from foo

 update foo
set xml_data = replace(xml_data, 'name xmlns:json=""http://www.samplenamespace.com/json""', 'name ')
go
update foo
set xml_data = replace(xml_data, 'age  xmlns:json=""http://www.samplenamespace.com/json""', 'age ')
go
select * from foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...