如何使用SELECT语句更新同一Salesperson表中的多行数据
解决UPDATE时的“Subquery returned more than 1 value”错误
嘿,我完全懂你碰到的这个问题!你写的那个UPDATE语句里的子查询会返回所有行的处理结果,数据库根本不知道该把哪个结果对应到哪一行,所以才会抛出那个多值错误。
其实根本不需要用子查询,直接在UPDATE的SET子句里使用你已经验证过的LEFT+CHARINDEX表达式就行——因为在UPDATE操作中,每一行都会基于自己的salesperson_name值独立计算处理后的结果。
正确的更新语句
BEGIN TRAN UPDATE Salesperson SET salesperson_name = LEFT(salesperson_name, CHARINDEX('-', salesperson_name) - 1) -- 先执行SELECT验证结果是否符合预期 SELECT salesperson_name FROM Salesperson -- 如果没问题,取消注释下面的提交语句 -- COMMIT TRAN
更安全的版本(处理异常数据)
如果你的表中可能存在没有-符号的行(虽然你当前的数据里没有,但提前预防总是好的),可以加个WHERE条件过滤,避免这些行触发错误:
BEGIN TRAN UPDATE Salesperson SET salesperson_name = LEFT(salesperson_name, CHARINDEX('-', salesperson_name) - 1) WHERE CHARINDEX('-', salesperson_name) > 0 -- 只更新包含'-'的行 SELECT salesperson_name FROM Salesperson -- COMMIT TRAN
这样执行后,你的salesperson_name列就会变成你之前SELECT查询得到的结果:Undefined、Sam Brett、Kelly Roberts... 完全符合你的需求。
内容的提问来源于stack exchange,提问作者jw11432
相关产品推荐
相关产品推荐

