XML类型的删除操作
前篇XML插入的文章,由于疏忽,可能给一些朋友带来误解。这篇是关于XML类型的删除操作。
在这里再说明下,对XML的操作,不仅需要注意命名空间的问题,同时还需要注意大小写。XML对大小写是敏感的。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
--创建测试数据库
CREATE DATABASE mytest;
GO
USE mytest;
GO
--创建测试表
CREATE TABLE Users
(
ID INT IDENTITY(1,1),
UserInfo XML
)
/*****************删除节点属性*****************************/
---插入测试数据
DECLARE @xml XML
SET @xml='<root>
<user id="1">
text
<userid>1</userid>
<userName>test1</userName>
</user>
</root>'
INSERT INTO Users(UserInfo)VALUES(@xml)
--DELETE Users
UPDATE Users SET UserInfo.modify('delete /root/user/@id')
select * from Users
/*****************删除节点*****************************/
UPDATE Users SET UserInfo.modify('delete /root/user/userid[1]')
select * from Users
/*****************删除节点中的文本*****************************/
UPDATE Users SET UserInfo.modify('delete /root/user/text()')
select * from Users
/*****************删除第二个节点(userName)*****************************/
UPDATE Users SET UserInfo.modify('delete /root/user/*[2]')
select * from Users
/*****************根据属性值删除节点*****************************/
---插入测试数据
DECLARE @xml XML
SET @xml='<root>
<user id="1" a="a">
<userid>1</userid>
<userName>test1</userName>
</user>
<user id="2" b="b">
<userid>1</userid>
<userName>test1</userName>
</user>
</root>'
INSERT INTO Users(UserInfo)VALUES(@xml)
---删除属性
UPDATE Users SET UserInfo.modify('delete /root/user[@id=1]/@a')
select * from Users
---删除节点
UPDATE Users SET UserInfo.modify('delete /root/user[@id=1]/userName')
select * from Users