You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:36:03