方案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以后的版本)