博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

将同一个表中的一个域更新到另外一个域的SQL文

Posted on 2010-05-14 11:55  zhu zhu  阅读(871)  评论(0编辑  收藏  举报
方案1: 

update test set a=tb.b

from test ta, (select a,b,k from test) tb

where ta.k=tb.k

 K为Key 

 

方案2:

update a set a.a1 = (select b.b1 from b where b.b2=a.a2)  where a2 in (select b2 from b)

假定数据量非常大,建议用exist改写in。

 

方案3:

declare @tmp table(aa nvarchar(7), bb int)
insert into @tmp(aa,bb) (select a.RefEMsgCtlNo,a.RefLogOutPutType 
FROM            RefErrMsg a
WHERE           (a.RefEMsgCtlNo = 'CMC0007'))
update RefErrMsg set RefDspslType=(select bb from @tmp where aa=RefErrMsg.RefEMsgCtlNo) 
where  RefEMsgCtlNo in (select aa from @tmp)

上记sql文已通过验证,应该是满足楼主要求。

由于使用了临时表,增加了额外的I/O负担,所以不适合大数据量且频繁操作的情况。

 

方案4:

能不能在一个SQL中先用WITH把临时表数据先准备出来(WITH AS适用于SQL SERVER 2005以后的版本 

https://intra.liandisys.com.cn/ioffice/index_frame.jsp