我收到此错误:当未使用 EXISTS 引入子查询时,只能在选择列表中指定一个表达式

Loo*_*ers 3 t-sql sql-server

这是我的查询。我正在尝试更新表中的新列:

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 引入时,选择列表中只能指定一个表达式。

我究竟做错了什么?

CSL*_*CSL 5

子查询中只能返回一列,因此请删除,*该查询的一部分。

子查询还必须只返回一行(值)进行更新,因此您需要确保它具有适当的 where 子句来强制执行此操作,或者正如 Tim 在上面的评论中提到的那样,将子查询更改为 if that SELECT TOP(1)isn'不可能。