两个结构完全相同的表,如果有某字段相同的话,两个表都更新这个字段,请问这个如何实现?

2025-03-04 14:56:49
推荐回答(4个)
回答1:

一般是采用临时表,触发器更新,函数运算 这些方式

临时表消耗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


回答2:

一般是采用临时表,触发器更新,函数运算 这些方式

回答3:

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);

回答4:

将2个update放到一个事务里面执行.