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

SQL报错:子查询未用EXISTS仅能指定一个表达式的解决

SQL更新报错解决方案:Only one expression can be specified in the select list

错误原因分析

你写的赋值语句里,子查询返回了DeviceName和SUBSTRING处理结果两个字段,但SET RoomName只能接收单个表达式的结果,这直接触发了报错。另外,即使去掉多余的DeviceName,如果子查询没有和要更新的表做关联,会返回多行数据,同样会报错。

正确的更新语句

场景1:跨表更新目标表的RoomName字段

假设你要更新的目标表为TargetTable,且该表和Location.Device通过某个关联字段(比如DeviceID)匹配,语句如下:

UPDATE t
SET t.RoomName = SUBSTRING(d.DeviceName, 5, LEN(d.DeviceName) - 5)
FROM TargetTable t
INNER JOIN Location.Device d 
    ON t.DeviceID = d.DeviceID -- 替换为实际的关联字段

场景2:直接修改Location.Device的DeviceName字段(匹配你的期望结果)

如果你的需求是把DeviceName替换为截取后的值,语句更简洁:

UPDATE Location.Device
SET DeviceName = SUBSTRING(DeviceName, 5, LEN(DeviceName) - 5)

执行结果验证

  • 场景1执行后,目标表的RoomName会被替换为截取后的设备名称:
房间名称设备名称
Room1-ABldg-Room1-AA
Room2-BBldg-Room2-BA
Room3-BBldg-Room3-BA
Room4-ABldg-Room4-AA
  • 场景2执行后,数据完全符合你给出的期望结果:
房间名称设备名称
ARoom1-A
BRoom2-B
BRoom3-B
ARoom4-A

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:03:45