SQL多插入语句执行时变量递增异常,如何实现预期的8行交替数据插入?
问题原因
- 初始版本逻辑问题:你每次循环给
@counter加1后,同时插入A、B两条记录,会导致同一个number值对应两个字母,自然会输出1A、1B、2A、2B的结果。 - 二次修改的逻辑问题:你把插入B和
@counter递增的逻辑放到了while循环体外,循环体只有插入A的语句,@counter永远不会变化,代码会进入死循环,根本不会执行后续插入B的逻辑。
修正方案
你只需要保证每次循环只插入1条记录,循环总共跑8次,根据@counter的奇偶性匹配对应的字母即可,参考代码如下:
declare @counter as int = 0 while (@counter < 8) begin set @counter = @counter + 1 -- 奇数匹配A,偶数匹配B insert into [table] (number, letter) values (@counter, case when @counter % 2 = 1 then 'A' else 'B' end) end
注意:
table是SQL保留关键字,建议用方括号[]包裹避免语法报错。
如果你希望保留每次循环插入两条记录的写法,也可以调整为如下逻辑:
declare @counter as int = 0 while (@counter < 8) begin insert into [table] (number, letter) values (@counter + 1, 'A') insert into [table] (number, letter) values (@counter + 2, 'B') set @counter = @counter + 2 end
两种写法最终输出的结果都和你期望的目标一致。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

