【发布时间】: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,更好的修复:更改您的逻辑,以便子查询仅返回一个更新值。 -
您的选择案例有 ` ,* `,使其返回多于一列。
标签: sql-server tsql