蛙蛙推荐:使用XML字段批量更新数据库
2008-12-29 18:37
316 查看
摘要:有时候我们想根据不同的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
--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
相关文章推荐
- 蛙蛙推荐:使用XML字段批量更新数据库
- 使用XML字段批量更新数据库
- Atitit 数据库view视图使用推荐规范与最佳实践与方法
- sqlplus使用copy命令在两个数据库之间更新数据
- Code59 使用DataSet更新数据库中的数据表
- Android数据库框架-----GreenDao3的相关使用和版本升级更新
- 更新、插入数据库所使用的UPDATE()
- 使用DataAdpater自动批量更新DataSet中的数据到数据库
- iPad2使用心得和应用推荐(不定期更新)
- 蛙蛙推荐:使用ASP.NET开发WAP2.0(XHTML MP)页面
- 支持“EFDBContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
- C#使用DataSet Datatable更新数据库的三种实现方法
- (转)在Web项目中使用LiquiBase实现数据库自动更新
- 艾伟_转载:使用LINQ to SQL更新数据库(中):几种解决方案
- 问题描述: 在使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,抛出异常如下:
- 一起谈.NET技术,使用LINQ to SQL更新数据库(上):问题重重
- PHP之道推荐使用PHP版本,数据库方式,以及虚拟机的创建程序
- DataAdapter数据集DataSet和数据库的同步(2):使用DataAdapter来更新数据集
- Silverlight + WCF使用Linq to SQL以及ADO.NET Entity Data Model更新数据库子表方法
- ADO.net——使用数据集更新数据库(例子及代码解析)