SQL Server: 删除 XML 字段的某个节点
来源:互联网 发布:log4j2 日志数据库 编辑:程序博客网 时间:2024/06/06 02:10
针对于 SQL Server 中的 XML 列,如何删除其中的一个 XML 节点呢?这里有两种方法。
方法1 直接通过SQL语句将目标节点设置为 null即可,直截了当,非常容易。
方法2 如下,查询后进行修改(相关操作我封装成了一个存储过程来演示,如下存储过程会从不同位置读取数据,并通过游标寻找并处理由 Guid 格式标明的目标数据)
[sql]
IF( Object_id('proc_ClearSomeInformation', 'p') IS NOT NULL )
DROP PROC proc_ClearSomeInformation
GO
CREATE PROCEDURE proc_ClearSomeInformation(
@sourceTable nvarchar(max),
@identity nvarchar(max))
AS
DECLARE @metadata xml
IF @sourceTable = 'SourceA'
SET @metadata = (SELECT MetadataSet FROM SourceA WHERE Id = @identity)
ELSE
SET @metadata = (SELECT MetadataSet FROM SourceB WHERE Id = @identity)
DECLARE @mssql nvarchar(max)
DECLARE @result xml
-- Start to reset the metadata XML value
DECLARE @columnName nvarchar(max)
DECLARE traversalMetadataName CURSOR FAST_FORWARD FOR
-- Get all metadata columns and traver them.
SELECT name FROM syscolumns WHERE (id = (SELECT id FROM sysobjects WHERE (name = @sourceTable)))
AND name like 'M[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]_%'
-- GUID Format
OPEN traversalMetadataName
FETCH NEXT FROM traversalMetadataName INTO @columnName
WHILE @@fetch_status = 0
BEGIN
SET @mssql = N'SET @metadata.modify(''delete (/' + @columnName + ')[1]'')'
EXEC sp_executesql @mssql, N'@metadata xml OUT', @metadata OUT
FETCH NEXT FROM traversalMetadataName INTO @columnName
END
CLOSE traversalMetadataName
DEALLOCATE traversalMetadataName
SET @mssql = N'UPDATE ' + @sourceTable + ' SET MetadataSet = @metadata WHERE Id = ''' + @identity + ''''
EXEC sp_executesql @mssql, N'@metadata xml', @metadata
GO
[/sql]
查看原文:http://nap7.com/me/sql-delete-xml-node/
- SQL Server: 删除 XML 字段的某个节点
- sql server 删除某个字段重复的记录并留下一条记录
- ms sql server 去除某个字段的某个字符
- 删除SQL Server字段
- sql server 删除带默认值的字段
- sql server 删除带默认值的字段
- sql server 的xml字段操作
- SQL Server对Xml字段的操作
- sql server xml字段的操作
- SQL server对Xml字段的操作
- SQL Server对Xml字段的操作
- mysql 中删除某个字段重复的SQL语句
- SQL语句删除字段中包含的某个字符
- sql server 更新两个表的某个字段
- SQL SERVER添加删除修改字段的SQL
- SQL SERVER 2008 删除某个数据库的所有连接进程
- sql如何获得某个数据库里面的表的字段名,字段类型,字段长度(sql server)
- SQL Server中根据某个字段,ID字段自动增长的实现
- delphi正则表达式学习笔记(三)
- C#: 字符串连接 (+=) 与 StringBuilder 效率分析
- 求道智慧课堂 让课堂手机不再泛滥! 开发侧记(一)
- java之JUC系列-外部Tools-Executors|Semaphor|Exchanger|CyclicBarrier|CountDownLatch
- php 判断手机访问还是pc访问
- SQL Server: 删除 XML 字段的某个节点
- Struts2多文件上传错误解决
- ADFS 概念与基本开发介绍 (1)
- 安装oracle11g时,Enterprise Manager配置成功,出现以下警告……
- C#: 双检锁 (Double Checked Locking)
- Office Delve 初窥 - What is Office Delve?
- 顺序队列
- 常用SQL查询语句 Oracle中Union,Union All,Intersect,Minus的有什么区别
- pmon 的实例健康检查处理逻辑分析