You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server:如何合并两条更新语句并按新值更新列C

解决方案

当然可以把两条更新语句合并成一条,关键是要避开SQL UPDATE语句的特性——SET子句里的列引用都是基于行更新前的原始值,所以直接写C = A+B会用到旧的A值。下面是两种可行的写法:

方法1:直接复用A的计算逻辑

既然A的新值是@one * B,计算C时直接用这个表达式代替A即可,结果和两条语句完全一致:

declare @one int = (select col1 from T2)
update T1 
set A = @one * B,
    C = (@one * B) + B

方法2:用CTE预计算更新值(适合复杂场景)

如果A的计算逻辑复杂,不想重复写表达式,可以先用CTE预先算出所有要更新的值,再关联表进行更新(需要T1有主键或唯一键来匹配行,比如假设主键是ID):

declare @one int = (select col1 from T2)
with UpdateData as (
    select 
        ID,
        @one * B as NewA,
        (@one * B) + B as NewC
    from T1
)
update T1
set A = ud.NewA,
    C = ud.NewC
from T1 t
inner join UpdateData ud on t.ID = ud.ID

补充说明

SQL的UPDATE语句中,SET子句的所有赋值操作是基于同一行的原始数据计算的,不会实时引用刚更新的列值。所以必须通过复用表达式或者预计算的方式,才能让C使用A的新值来计算。

内容的提问来源于stack exchange,提问作者Hasan Shouman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:24:02