这是我的查询。我正在尝试更新表中的新列:
update [dbo].[I_InstallBase_Updated_1]
set updated_padid = (SELECT
CASE
WHEN LEN(padid) - LEN(REPLACE(padid,'.','')) > 1
THEN LEFT(padid,CHARINDEX('.',padid,CHARINDEX('.',padid,1)+1)-1)
ELSE padid -- if there are 1 or 0 dots(.) then return the entire value
END as updated, *
FROM
[I_InstallBase_Updated_1]
WHERE
serial_number LIKE 'SKE%'
AND PARENT_INSTANCE_END_DATE IS NULL
AND INSTANCE_USAGECODE = 'IN_RELATIONSHIP'
AND instance_status != 'Expired'
AND installed_location_type = 'HZ_PARTY_SITES'
AND padid != 'n/a'
AND padid LIKE ('%.%')
)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
当子查询不带 EXISTS 引入时,选择列表中只能指定一个表达式。
我究竟做错了什么?
子查询中只能返回一列,因此请删除,*
该查询的一部分。
子查询还必须只返回一行(值)进行更新,因此您需要确保它具有适当的 where 子句来强制执行此操作,或者正如 Tim 在上面的评论中提到的那样,将子查询更改为 if that SELECT TOP(1)
isn'不可能。