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

Posted

技术标签:

【中文标题】我收到此错误:当未使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式【英文标题】:I am getting this error: Only one expression can be specified in the select list when the subquery is not introduced with EXISTS 【发布时间】:2016-12-23 09:46:43 【问题描述】:

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

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 ('%.%')
                    )

我收到此错误:

当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。

我做错了什么?

【问题讨论】:

快速修复:将TOP(1) 添加到SELECT,更好的修复:更改您的逻辑,以便子查询仅返回一个更新值。 您的选择案例有 ` ,* `,使其返回多于一列。 【参考方案1】:

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

子查询也必须只为更新返回一行(值),因此您需要确保它具有适当的 where 子句来强制执行此操作,或者正如 Tim 在上面的评论中提到的,将子查询更改为 @ 987654322@ 如果那是不可能的。

【讨论】:

您可能需要注意子查询也应该只返回一条记录。

以上是关于我收到此错误:当未使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式的主要内容,如果未能解决你的问题,请参考以下文章

错误:不使用EXISTS引入子查询时,选择列表中只能指定一个表达式

当子查询没有引入 EXISTS 错误时,选择列表中只能指定一个表达式

不使用EXISTS引入子查询时,选择列表中只能指定一个表达式--sql中的错误

创建函数时出错 - 如果不使用 EXISTS 引入子查询,则选择列表中只能指定一个表达式

当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。 - SQL 服务器

SQL Server 错误:当子查询没有用 EXISTS 引入时,选择列表中只能指定一个表达式