在while循环中给@total赋值count结果触发Msg 116错误如何解决
SQL 赋值报错问题解决
Msg 116, Level 16, State 1, Procedure sp_med_rankingfinall, Line 10 [Batch Start Line 0]
当子查询未通过EXISTS引入时,选择列表中仅能指定一个表达式。
问题根因
给@total变量赋值的子查询同时返回了cod_medico、count统计结果两个字段,单个变量仅能接收单个返回值,因此触发报错。同时嵌套子查询属于冗余写法,可直接简化赋值逻辑。
修正后代码
declare @Total int = 0 declare @contador int = 0 -- 请提前声明并赋值你代码中用到的@dato变量,否则会触发未声明变量报错 declare @dato varchar(50) = '需要匹配的预约状态' while @contador <= 22 begin -- 直接赋值count结果即可,不需要返回cod_medico也不需要嵌套子查询 select @total = count(@dato) from Registro_citas where cod_medico = 900 + @contador and estado_cita = @dato group by cod_medico set @contador = @contador + 1 end
补充说明
- 当前写法每轮循环会用当前医生的统计值覆盖
@total,如果需要统计所有23个医生的符合条件的总预约数,可将赋值语句改为select @total = @total + count(@dato) - 若需要保证无匹配记录时
@total被赋值为0,可调整为select @total = isnull(count(@dato), 0)
内容的提问来源于stack exchange,提问作者Wilmer Cordero Orozco
相关产品推荐
相关产品推荐

