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

SQL Server中While循环条件插入数据异常,循环变量未递增求解

问题排查与修正方案

错误原因分析

  • 内层WHILE循环未对@i进行修改,一旦进入循环就会无限执行插入操作,导致外层循环的@i无法继续递增,程序陷入死循环
  • 第二个内层循环的条件@i > 26 AND @i <565遗漏了@i=26的场景,不符合需求中1-26的IsScience为1的要求
  • 完全不需要嵌套WHILE循环,需求仅需根据@i的范围做分支判断

修正后的WHILE循环代码

BEGIN
DECLARE @i int = 0
WHILE @i < 565 
BEGIN
    SET @i = @i + 1
    -- 根据当前序号判断IsScience值
    IF @i BETWEEN 1 AND 26
    BEGIN
        INSERT INTO [dbo].[T_Emp] ([EmpID],[EMpNo],[IsActive],[IsScience])
        VALUES(@i,@i,1,1);
    END
    ELSE
    BEGIN
        INSERT INTO [dbo].[T_Emp] ([EmpID],[EMpNo],[IsActive],[IsScience])
        VALUES(@i,@i,1,0);
    END
END
END

更高效的批量插入方案(推荐)

在SQL Server中,循环插入的效率远低于集合式操作,推荐使用CTE生成序列后批量插入:

WITH EmpSeq AS (
    SELECT TOP 565 
        ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS EmpID
    FROM sys.all_columns ac1
    CROSS JOIN sys.all_columns ac2
)
INSERT INTO [dbo].[T_Emp] ([EmpID],[EMpNo],[IsActive],[IsScience])
SELECT 
    EmpID,
    EmpID,
    1,
    CASE WHEN EmpID BETWEEN 1 AND 26 THEN 1 ELSE 0 END
FROM EmpSeq;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:46:05