使用INSERT SELECT插入附加数据时报Msg 512子查询返回多值错误
错误原因
你在VALUES子句中嵌套的SELECT userid查询返回了多个符合条件的用户ID,而VALUES语法要求每个参数位置只能传入单个值,因此触发了子查询返回多值的语法错误。
解决方案
直接使用INSERT ... SELECT语法,不需要写VALUES子句,将固定值直接作为SELECT的返回列即可批量插入所有符合条件的用户数据,修正后代码如下:
INSERT INTO [database].[dbo].[table1] ( userid_fk, year, month, leaveCredit, leaveCreditReason, addedOn, addedBy ) SELECT userid, YEAR(GETDATE()), MONTH(GETDATE()), 1.5, 'monthly leave', GETDATE(), '1' FROM [database].[dbo].[table2] WHERE user_isactive = 1 AND date_of_joining < DATEADD(m, -1, DATEADD(mm, DATEDIFF(m, 0, GETDATE()), 0))
如果业务需求确实只需要插入单个用户,也可以给子查询添加TOP 1限制,确保子查询只返回单个值。
内容的提问来源于stack exchange,提问作者Sandeep Chaurasiya
相关产品推荐
相关产品推荐

