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

SQL嵌套WHILE循环插入异常:仅插入13行而非预期182行

问题原因

你嵌套循环的逻辑存在变量重置错误:@komodita变量在所有循环外部初始化,第一次外层循环(@nadobaTyp=1)执行完内层循环后,@komodita的值已经达到14(等于@komoditaMax)。后续外层循环(@nadobaTyp从2到13)执行时,内层循环的条件@komodita < @komoditaMax不再成立,因此不会进入内层循环执行插入操作,最终只插入了13行数据。

修复后的代码

将@komodita的初始化移至外层循环内部,确保每次处理新的nadobaTyp时,@komodita都重置为0:

DECLARE @nadobaTyp INT = 0;
DECLARE @nadobaTypMax INT = (SELECT COUNT(*) FROM CzEkokomNadobaTyp);
DECLARE @komoditaMax INT = (SELECT COUNT(*) FROM CzEkokomNadobaKomodita);

WHILE @nadobaTyp < @nadobaTypMax
BEGIN
    SET @nadobaTyp = @nadobaTyp + 1;
    print 'nadoba typ: ' + CONVERT(varchar(10), @nadobaTyp);
    
    -- 每次外层循环开始时重置komodita变量
    DECLARE @komodita INT = 0;
    WHILE @komodita < @komoditaMax
    BEGIN
        SET @komodita = @komodita + 1;
        print 'komodita: ' + CONVERT(varchar(10), @komodita);
        INSERT INTO CzEkokomNadoba (IdRegistrace, IdSubjektNad, IdCzEkokomNadobaTyp, IdCzEkokomNadobaKomodita, Pocet, Cetnost, Popis, Litr)
        VALUES (1, 3, @nadobaTyp, @komodita, 1, 12, NULL, 1000.000000);
    END;
END;
验证效果

修复后,每个nadobaTyp(1到13)都会触发14次内层循环,总共插入13×14=182行数据,执行输出中每个nadoba typ: X后面都会跟着14条komodita: Y的打印信息和对应的行插入提示。

内容的提问来源于stack exchange,提问作者pburgr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:35:21