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

为何SQL表执行UPDATE仅更新一条记录?存储过程问题求助

存储过程仅更新最后一行的原因及解决方法

表结构

ABCDE
1000522018-A
100115632018-A
1002251242018-A
1003351852018-A
1004452462018-A
1005553072018-A
1000653682018-B
1001754292018-B
1000854902018-C
1001955512018-C
10021056122018-C
10031156732018-C
10041257342018-C

问题代码

SELECT @A = a,
       @Ans = b * c
FROM   tbln
WHERE  d = '2018-A'

UPDATE tbln
SET e = @ANS
WHERE d = '2018-A'
  AND a = @A 

原因分析

你用SELECT语句给变量@A和@Ans赋值时,数据库会逐行遍历所有符合d='2018-A'的记录,每遍历一行就用当前行的a和b*c覆盖变量中的旧值。当遍历完成后,变量里仅保留了最后一行的a值和对应的乘积结果。后续的UPDATE语句只会匹配这个最后一行的a,所以最终只更新了最后一行数据。

解决方法

不需要通过变量中转计算结果,直接在UPDATE语句的SET子句中完成乘积计算即可,这是最简洁高效的写法:

UPDATE tbln
SET e = b * c
WHERE d = '2018-A'

如果你的业务逻辑确实需要使用变量(比如包含额外的复杂计算),可以使用游标逐行处理数据,但这种场景下完全没必要,上面的UPDATE语句可以一次性更新所有符合条件的行,性能远优于变量+循环的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:21:21