打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用XML字段批量更新数据库
userphoto

2010.04.15

关注
使用XML字段批量更新数据库 收藏
摘要:有时候我们想根据不同的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
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dayu027/archive/2008/12/31/3647265.aspx
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
XML和数据库之间相互的映射
部分sql注入总结
使用ABAP SE16查看类型为RAWSTRING的数据库列字段值
mysql数据库中利用GROUP
在ORACLE数据库中查询指定用户的表结构
PowerDesigner 工具生成数据库Report指导
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服