INSERT查询触发Subquery returned more than 1 value错误的原因分析
问题分析
你的INSERT查询报错的核心原因是:在VALUES子句中使用的子查询返回了多行数据。
具体来说,(SELECT EmpId FROM @EmployeeDetails)会返回两条记录(101和102),但VALUES语法中,每个括号内的字段值必须是单个值(或返回单行的子查询),当子查询返回多行时,SQL Server无法将多行数据匹配到单个EmpId字段的位置,因此抛出错误。
正确写法
要批量插入临时表中的员工数据到EmpCopy表,应该使用INSERT...SELECT语法,而不是嵌套子查询的VALUES写法:
DECLARE @EmployeeDetails AS [dbo].[Employee] INSERT INTO @EmployeeDetails VALUES (101), (102) -- 可以合并成一行批量插入临时表 INSERT INTO [dbo].[EmpCopy] (EmpId, Dept) SELECT EmpId, 'Sales' FROM @EmployeeDetails
如果一定要用VALUES语法(仅适合单行或明确指定每行的场景),需要为每行单独写值,但显然这不适用于批量插入的场景:
-- 仅适合少量固定行的情况,不推荐用于批量从表中取数据 INSERT INTO [dbo].[EmpCopy] (EmpId, Dept) VALUES (101, 'Sales'), (102, 'Sales')
内容的提问来源于stack exchange,提问作者jestges
相关产品推荐
相关产品推荐

