使用一个 WHERE 子句更新多个表
Posted
技术标签:
【中文标题】使用一个 WHERE 子句更新多个表【英文标题】:UPDATE to multiple tables with one WHERE clause 【发布时间】:2020-11-02 17:27:58 【问题描述】:我需要使用相同的 WHERE 子句更新两个表。 WHERE 子句有数百个 ID,所以我想避免像这样写两次...
UPDATE TABLE1
SET (values...)
WHERE ID in (list of IDs)
UPDATE TABLE2
SET (values...)
WHERE ID in (list of IDs) -- this is the same statement as above
有没有办法将这些与一个 WHERE 语句合并?
【问题讨论】:
否 - 一条更新语句只会直接更新一张表。将您的 ID 放入临时表(或表变量)中,然后加入更新。 这能回答你的问题吗? How to update two tables in one statement in SQL Server 2005? 根据链接的 SO 答案,请确保将更新语句包装在transaction
中,以便在部分原因因任何原因失败时回滚 update
。
【参考方案1】:
SQL Server 不支持多表更新。
但是,您可以将这些 id 放在一个表中,然后在查询中使用。
create table id_table (id int); -- or whathever datatype you need
insert into id_table (id) values (1), (2), ...; -- list of ids
然后:
update t
set ...
from table1 t
where exists (select 1 from id_table i where i.id = t.id)
【讨论】:
【参考方案2】:您不能在 SQL Server 中真正做到这一点。最好的办法是创建一个临时表:
select *
into toupdate
from values ( . . . ) v(id)
然后您可以在delete
语句中使用它:
update table1
set . . .
where id in (select id from toupdate);
【讨论】:
你的意思是我“不能”真的做到吗?而且更新不删除对吧?以上是关于使用一个 WHERE 子句更新多个表的主要内容,如果未能解决你的问题,请参考以下文章