蛙蛙推荐:使用XML字段批量更新数据库
来源:互联网 发布:希拉里克林顿知乎 编辑:程序博客网 时间:2024/05/18 03:25
摘要:有时候我们想根据不同的where条件更新多条记录,一般就需要用多条语句,本文教你怎样用一次查询完成,但XML处理会让数据库进程CPU升高,请酌情使用。
--1、初始化临时表及原始数据
if object_id('tempdb..#t') is not null
drop table #t
if object_id('tempdb..#t2') is not null
drop table #t2
create table #t(k varchar(100),v int)
insert into #t values('a',1)
insert into #t values('b',2)
select * from #t
--输出如下
--k v
--a-1
--b-2
--2、准备批量更新的XML
DECLARE @a TABLE(data XML)
INSERT @a SELECT '
<root>
<i k=''a'' v=''3'' />
<i k=''b'' v=''4'' />
</root>'
--3、将表变量a输出到一个临时结果集,并用来和原始表#t join后更改原始表
--这里用到了带有from子句的update语句和cte类型
update #t set #t.v = d.v
from #t inner join (
SELECT b.id k,c.id v FROM @a a
CROSS APPLY
(
SELECT id = t.x.value('@k','varchar(100)') FROM a.data.nodes('//i') AS t(x)
) b
CROSS APPLY
(
SELECT id = t2.x.value('@v','int')
FROM a.data.nodes('//i') AS t2(x)
where t2.x.value('@k','varchar(100)') = b.id
) c
) as d
on #t.k = d.k
--其中cte d的结果集应该如下
--k v
--a-3
--b-4
--4、验证原始表是否已经修改
select * from #t
--输出如下
--k v
--a-3
--b-4
if object_id('tempdb..#t') is not null
drop table #t
if object_id('tempdb..#t2') is not null
drop table #t2
create table #t(k varchar(100),v int)
insert into #t values('a',1)
insert into #t values('b',2)
select * from #t
--输出如下
--k v
--a-1
--b-2
--2、准备批量更新的XML
DECLARE @a TABLE(data XML)
INSERT @a SELECT '
<root>
<i k=''a'' v=''3'' />
<i k=''b'' v=''4'' />
</root>'
--3、将表变量a输出到一个临时结果集,并用来和原始表#t join后更改原始表
--这里用到了带有from子句的update语句和cte类型
update #t set #t.v = d.v
from #t inner join (
SELECT b.id k,c.id v FROM @a a
CROSS APPLY
(
SELECT id = t.x.value('@k','varchar(100)') FROM a.data.nodes('//i') AS t(x)
) b
CROSS APPLY
(
SELECT id = t2.x.value('@v','int')
FROM a.data.nodes('//i') AS t2(x)
where t2.x.value('@k','varchar(100)') = b.id
) c
) as d
on #t.k = d.k
--其中cte d的结果集应该如下
--k v
--a-3
--b-4
--4、验证原始表是否已经修改
select * from #t
--输出如下
--k v
--a-3
--b-4
- 蛙蛙推荐:使用XML字段批量更新数据库
- 使用XML字段批量更新数据库
- mysql批量更新数据库的某一个字段
- python脚本实现批量更新数据库中字段值
- 蛙蛙推荐:利用WMI脚本批量恢复SQLSERVER数据库
- 使用FMDB事务批量更新数据库
- 使用FMDB事务批量更新数据库
- 使用FMDB事务批量更新数据库
- 使用FMDB事务批量更新数据库
- mybatis批量更新 使用动态表和字段
- 数据库批量更新,添加!有关XML的操作
- 批量更新表中某字段值
- thinkphp 批量更新数据字段
- mongodb批量更新某个字段
- Oracle中使用一个字段的值批量更新另一个字段
- SQL批量更新数据库
- 数据库批量更新
- PHP批量更新数据库
- 翻译:改进.NET应用程序的性能和可伸缩性(四)-SQL Server性能
- 今日阅读20090102-基本数据结构
- 翻译:改进.NET应用程序的性能和可伸缩性(三)-Remoting性能
- 今日阅读-20081231-学习remoting
- 蛙蛙推荐:作一个支持过载自适应和动态扩容的负载均衡服务
- 蛙蛙推荐:使用XML字段批量更新数据库
- 翻译:改进.NET应用程序的性能和可伸缩性(二)-为性能和可伸缩性做架构和设计上的Review
- 翻译:改进.NET应用程序的性能和可伸缩性(一)-概述及ADO.NET 性能
- 蛙蛙推荐:蛙蛙教你配置linux+mysql+.net环境
- 每日阅读20081216
- CLR宿主相关
- 清空日志后备份数据库
- 每日阅读20081127
- 转:2008年微软Windows硬件工程(WinHEC)大会