使用SQL更新包含XML的表中的特定列
我试图更新表中包含多个名称空间的特定列。我的表格结构是:使用SQL更新包含XML的表中的特定列,sql,sql-server,xml,sql-update,Sql,Sql Server,Xml,Sql Update,我试图更新表中包含多个名称空间的特定列。我的表格结构是: +------+---------+-----------------------------------------------------------------------+ | cid | cidtype | xml_data | +------+---------+---------------------
+------+---------+-----------------------------------------------------------------------+
| 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_数据列上的sql replace从name元素中删除名称空间,然后从age元素中删除名称空间。 这将使主元素与所需的命名空间保持原样
这个想法正在奏效。但是,在我的存储过程中,大约有50个元素需要更新。因此,在51个元素中,我只希望1个元素具有名称空间,而更新50个元素是如此乏味。所以我尝试在这里添加一个“Where”条件。有可能吗?您可以将所有名称空间替换为空白,然后将名称空间添加回。是的,我将所有字段的名称空间设置为空白,然后单独添加到主节点
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
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