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
相关产品推荐
相关产品推荐

