一般是采用临时表,触发器更新,函数运算 这些方式
临时表消耗IO,触发器可能环节不统一,函数运算就是更新后的字段还原叠加(A_zhangsan 去掉前缀级联,虽然不用临时表,但是也有一定的风险)
举一个临时表的例子:使用@A,@B 临时表变量模拟你的两个表,@T模拟临时表
使用事务更新
declare @A table (name varchar(30),age int)
declare @B table (name varchar(30),age int)
declare @T table (name varchar(30))
insert into @A
select 'zhangsan','54' union all
select '郑和','54' union all
select '曹操','54' union all
select '关羽','46'
insert into @B
select 'zhangsan','54' union all
select '郑和','54' union all
select '曹操','54' union all
select '关羽','46'
insert into @T
select A.name
from @A A inner join @B B on(A.name=B.name)
begin tran
--
if exists(select null from @T)
begin
update A
set A.name='A_'+A.name
from @A A inner join @T T on(A.name=T.name)
update B
set B.name='B_'+B.name
from @B B inner join @T T on(B.name=T.name)
end
--
if @@trancount>0 commit tran
select * from @A
select * from @B
一般是采用临时表,触发器更新,函数运算 这些方式
UPDATE A SET name = 'A_' + name WHERE name in (SELECT name FROM B);
UPDATE B SET name = 'B_' + name WHERE name in (SELECT name FROM A);
将2个update放到一个事务里面执行.