重现步骤

[步骤]

----SKU首次出现  -- 初始化变量  
DECLARE @LastMaxID INT = 24612444; -- 上一次返回的ID  
DECLARE @MaxID INT; -- 设置@MaxID为最大的ID值 

SELECT @MaxID = Max(ID)
FROM   (SELECT TOP 5000 pd.ID
        FROM   RB_Procurement_Detail pd (NOLOCK)
               LEFT JOIN RB_Procurement_List pl (NOLOCK)
                 ON pd.CustomerID = pl.CustomerID
                    AND pd.P_Code = pl.P_Code
        WHERE  Isnull(pl.IsSample, 0) = 0
               AND pd.ID > @LastMaxID
        ORDER  BY pd.ID ASC) AS subquery;

-- 更新RB_Procurement_Detail表,设置IsFirstOrder为1  
UPDATE pd1
SET    pd1.IsFirstOrder = 1
FROM   RB_Procurement_Detail pd1
       LEFT JOIN RB_Procurement_List pl
         ON pd1.CustomerID = pl.CustomerID
            AND pd1.P_Code = pl.P_Code
WHERE  pd1.CustomerID = 1
       AND Isnull(pl.IsSample, 0) = 0
       AND pd1.IsFirstOrder = 0
       AND pd1.ID > @LastMaxID
       AND pd1.ID <= @MaxID
       AND NOT EXISTS (SELECT 1
                       FROM   RB_Procurement_Detail pd2
                              LEFT JOIN RB_Procurement_List pl2
                                ON pd2.CustomerID = pl2.CustomerID
                                   AND pd2.P_Code = pl2.P_Code
                       WHERE  pd2.CustomerID = 1
                              AND Isnull(pl2.IsSample, 0) = 0
                              AND pd1.sku = pd2.sku
                              AND pd2.ID < pd1.ID);

-- 更新RB_Procurement_List表,设置IsFirstOrder为1 
UPDATE pl
SET    pl.IsFirstOrder = 1
FROM   RB_Procurement_List pl
WHERE  pl.CustomerID = 1
       AND pl.IsFirstOrder = 0
       AND EXISTS (SELECT 1
                   FROM   RB_Procurement_Detail pd
                   WHERE  pd.CustomerID = pl.CustomerID
                          AND pd.P_Code = pl.P_Code
                          AND pd.IsFirstOrder = 1
                          AND pd.ID > @LastMaxID
                          AND pd.ID <= @MaxID); -- 返回@MaxID  
SELECT @MaxID AS MaxID; 




[结果]


[期望]

优化SQL 提升效率 减少阻塞
历史记录  
  1. 2026-08-20 16:19:36, 由 袁慧斌 创建。
  2. 2026-08-20 16:20:57, 由 李乐同 指派给 何建宝。
    修改了 指派给,旧值为 "liletong",新值为 "hejianbao"。
  3. 2026-08-20 16:21:46, 由 何建宝 编辑。
    修改了 严重程度,旧值为 "1",新值为 "2"。
    修改了 解决时效,旧值为 "0",新值为 "-1"。
    修改了 重现步骤,区别为:
    002- ----SKU首次出现 -- 初始化变量DECLARE @LastMaxID INT = 24612444; -- 上一次返回的IDDECLARE @MaxID INT; -- 设置@MaxID为最大的ID值SELECT @MaxID = Max(ID)FROM (SELECT TOP 5000 pd.ID FROM RB_Procurement_Detail pd (NOLOCK) LEFT JOIN RB_Procurement_List pl (NOLOCK) ON pd.CustomerID = pl.CustomerID AND pd.P_Code = pl.P_Code WHERE Isnull(pl.IsSample, 0) = 0 AND pd.ID &gt; @LastMaxID ORDER BY pd.ID ASC) AS subquery;-- 更新RB_Procurement_Detail表,设置IsFirstOrder为1UPDATE pd1SET pd1.IsFirstOrder = 1FROM RB_Procurement_Detail pd1 LEFT JOIN RB_Procurement_List pl ON pd1.CustomerID = pl.CustomerID AND pd1.P_Code = pl.P_CodeWHERE pd1.CustomerID = 1 AND Isnull(pl.IsSample, 0) = 0 AND pd1.IsFirstOrder = 0 AND pd1.ID &gt; @LastMaxID AND pd1.ID &lt;= @MaxID AND NOT EXISTS (SELECT 1 FROM RB_Procurement_Detail pd2 LEFT JOIN RB_Procurement_List pl2 ON pd2.CustomerID = pl2.CustomerID AND pd2.P_Code = pl2.P_Code WHERE pd2.CustomerID = 1 AND Isnull(pl2.IsSample, 0) = 0 AND pd1.sku = pd2.sku AND pd2.ID &lt; pd1.ID);-- 更新RB_Procurement_List表,设置IsFirstOrder为1UPDATE plSET pl.IsFirstOrder = 1FROM RB_Procurement_List plWHERE pl.CustomerID = 1 AND pl.IsFirstOrder = 0 AND EXISTS (SELECT 1 FROM RB_Procurement_Detail pd WHERE pd.CustomerID = pl.CustomerID AND pd.P_Code = pl.P_Code AND pd.IsFirstOrder = 1 AND pd.ID &gt; @LastMaxID AND pd.ID &lt;= @MaxID); -- 返回@MaxIDSELECT @MaxID AS MaxID;
    002+ ----SKU首次出现 -- 初始化变量DECLARE @LastMaxID INT = 24612444; -- 上一次返回的IDDECLARE @MaxID INT; -- 设置@MaxID为最大的ID值SELECT @MaxID = Max(ID)FROM (SELECT TOP 5000 pd.ID FROM RB_Procurement_Detail pd (NOLOCK) LEFT JOIN RB_Procurement_List pl (NOLOCK) ON pd.CustomerID = pl.CustomerID AND pd.P_Code = pl.P_Code WHERE Isnull(pl.IsSample, 0) = 0 AND pd.ID &gt; @LastMaxID ORDER BY pd.ID ASC) AS subquery;-- 更新RB_Procurement_Detail表,设置IsFirstOrder为1UPDATE pd1SET pd1.IsFirstOrder = 1FROM RB_Procurement_Detail pd1 LEFT JOIN RB_Procurement_List pl ON pd1.CustomerID = pl.CustomerID AND pd1.P_Code = pl.P_CodeWHERE pd1.CustomerID = 1 AND Isnull(pl.IsSample, 0) = 0 AND pd1.IsFirstOrder = 0 AND pd1.ID &gt; @LastMaxID AND pd1.ID &lt;= @MaxID AND NOT EXISTS (SELECT 1 FROM RB_Procurement_Detail pd2 LEFT JOIN RB_Procurement_List pl2 ON pd2.CustomerID = pl2.CustomerID AND pd2.P_Code = pl2.P_Code WHERE pd2.CustomerID = 1 AND Isnull(pl2.IsSample, 0) = 0 AND pd1.sku = pd2.sku AND pd2.ID &lt; pd1.ID);-- 更新RB_Procurement_List表,设置IsFirstOrder为1UPDATE plSET pl.IsFirstOrder = 1FROM RB_Procurement_List plWHERE pl.CustomerID = 1 AND pl.IsFirstOrder = 0 AND EXISTS (SELECT 1 FROM RB_Procurement_Detail pd WHERE pd.CustomerID = pl.CustomerID AND pd.P_Code = pl.P_Code AND pd.IsFirstOrder = 1 AND pd.ID &gt; @LastMaxID AND pd.ID &lt;= @MaxID); -- 返回@MaxIDSELECT @MaxID AS MaxID;
    003-
    003+
    002- <p>----SKU首次出现 -- 初始化变量<br />DECLARE @LastMaxID INT = 24612444; -- 上一次返回的ID<br />DECLARE @MaxID INT; -- 设置@MaxID为最大的ID值<br /><br />SELECT @MaxID = Max(ID)<br />FROM (SELECT TOP 5000 pd.ID<br /> FROM RB_Procurement_Detail pd (NOLOCK)<br /> LEFT JOIN RB_Procurement_List pl (NOLOCK)<br /> ON pd.CustomerID = pl.CustomerID<br /> AND pd.P_Code = pl.P_Code<br /> WHERE Isnull(pl.IsSample, 0) = 0<br /> AND pd.ID &gt; @LastMaxID<br /> ORDER BY pd.ID ASC) AS subquery;<br /><br />-- 更新RB_Procurement_Detail表,设置IsFirstOrder为1<br />UPDATE pd1<br />SET pd1.IsFirstOrder = 1<br />FROM RB_Procurement_Detail pd1<br /> LEFT JOIN RB_Procurement_List pl<br /> ON pd1.CustomerID = pl.CustomerID<br /> AND pd1.P_Code = pl.P_Code<br />WHERE pd1.CustomerID = 1<br /> AND Isnull(pl.IsSample, 0) = 0<br /> AND pd1.IsFirstOrder = 0<br /> AND pd1.ID &gt; @LastMaxID<br /> AND pd1.ID &lt;= @MaxID<br /> AND NOT EXISTS (SELECT 1<br /> FROM RB_Procurement_Detail pd2<br /> LEFT JOIN RB_Procurement_List pl2<br /> ON pd2.CustomerID = pl2.CustomerID<br /> AND pd2.P_Code = pl2.P_Code<br /> WHERE pd2.CustomerID = 1<br /> AND Isnull(pl2.IsSample, 0) = 0<br /> AND pd1.sku = pd2.sku<br /> AND pd2.ID &lt; pd1.ID);<br /><br />-- 更新RB_Procurement_List表,设置IsFirstOrder为1<br />UPDATE pl<br />SET pl.IsFirstOrder = 1<br />FROM RB_Procurement_List pl<br />WHERE pl.CustomerID = 1<br /> AND pl.IsFirstOrder = 0<br /> AND EXISTS (SELECT 1<br /> FROM RB_Procurement_Detail pd<br /> WHERE pd.CustomerID = pl.CustomerID<br /> AND pd.P_Code = pl.P_Code<br /> AND pd.IsFirstOrder = 1<br /> AND pd.ID &gt; @LastMaxID<br /> AND pd.ID &lt;= @MaxID); -- 返回@MaxID<br />SELECT @MaxID AS MaxID;<br /></p><div><br /></div>
    002+ <p>----SKU首次出现 -- 初始化变量<br />DECLARE @LastMaxID INT = 24612444; -- 上一次返回的ID<br />DECLARE @MaxID INT; -- 设置@MaxID为最大的ID值<br /><br />SELECT @MaxID = Max(ID)<br />FROM (SELECT TOP 5000 pd.ID<br /> FROM RB_Procurement_Detail pd (NOLOCK)<br /> LEFT JOIN RB_Procurement_List pl (NOLOCK)<br /> ON pd.CustomerID = pl.CustomerID<br /> AND pd.P_Code = pl.P_Code<br /> WHERE Isnull(pl.IsSample, 0) = 0<br /> AND pd.ID &gt; @LastMaxID<br /> ORDER BY pd.ID ASC) AS subquery;<br /><br />-- 更新RB_Procurement_Detail表,设置IsFirstOrder为1<br />UPDATE pd1<br />SET pd1.IsFirstOrder = 1<br />FROM RB_Procurement_Detail pd1<br /> LEFT JOIN RB_Procurement_List pl<br /> ON pd1.CustomerID = pl.CustomerID<br /> AND pd1.P_Code = pl.P_Code<br />WHERE pd1.CustomerID = 1<br /> AND Isnull(pl.IsSample, 0) = 0<br /> AND pd1.IsFirstOrder = 0<br /> AND pd1.ID &gt; @LastMaxID<br /> AND pd1.ID &lt;= @MaxID<br /> AND NOT EXISTS (SELECT 1<br /> FROM RB_Procurement_Detail pd2<br /> LEFT JOIN RB_Procurement_List pl2<br /> ON pd2.CustomerID = pl2.CustomerID<br /> AND pd2.P_Code = pl2.P_Code<br /> WHERE pd2.CustomerID = 1<br /> AND Isnull(pl2.IsSample, 0) = 0<br /> AND pd1.sku = pd2.sku<br /> AND pd2.ID &lt; pd1.ID);<br /><br />-- 更新RB_Procurement_List表,设置IsFirstOrder为1<br />UPDATE pl<br />SET pl.IsFirstOrder = 1<br />FROM RB_Procurement_List pl<br />WHERE pl.CustomerID = 1<br /> AND pl.IsFirstOrder = 0<br /> AND EXISTS (SELECT 1<br /> FROM RB_Procurement_Detail pd<br /> WHERE pd.CustomerID = pl.CustomerID<br /> AND pd.P_Code = pl.P_Code<br /> AND pd.IsFirstOrder = 1<br /> AND pd.ID &gt; @LastMaxID<br /> AND pd.ID &lt;= @MaxID); -- 返回@MaxID<br />SELECT @MaxID AS MaxID;</p>
    003-
    003+ <div><br /></div>
  4. 2026-08-20 16:22:23, 由 何建宝 指派给 许炯华。
    修改了 指派给,旧值为 "hejianbao",新值为 "xujionghua"。
  5. 2026-08-20 17:07:23, 由 许炯华 解决,方案为 非BUG-纯属误判 。
    修改了 解决方案,旧值为 "",新值为 "feibug"。
    修改了 解决版本,旧值为 "",新值为 "trunk"。
    修改了 解决日期,旧值为 "",新值为 "2026-08-20 17:07:13"。
    修改了 指派给 ,旧值为 "xujionghua",新值为 "yuanhuibin"。
    修改了 Bug状态 ,旧值为 "active",新值为 "resolved"。
    修改了 是否确认,旧值为 "0",新值为 "1"。
    修改了 解决者 ,旧值为 "",新值为 "xujionghua"。
  6. 2026-08-21 15:50:25, 由 陈莉珍 编辑。
    修改了 开发责任人,旧值为 "",新值为 "xujionghua"。
    修改了 测试责任人,旧值为 "",新值为 "yuanhuibin"。
    修改了 解决时效 ,旧值为 "0",新值为 "0.79"。
    修改了 上线时间 ,旧值为 "0000-00-00 00:00:00",新值为 "2026-08-20 17:07:23"。
    修改了 上线时效 ,旧值为 "-1",新值为 "0.80"。
  7. 2026-08-26 11:06:06, 由 袁慧斌 关闭。
    修改了 Bug状态 ,旧值为 "resolved",新值为 "closed"。
    修改了 指派给 ,旧值为 "yuanhuibin",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "yuanhuibin"。
    修改了 关闭日期,旧值为 "",新值为 "2026-08-26 11:06:06"。
所属项目 技术中心-需求池
所属模块 供应链   产品采购   采购
所属计划
所属迭代
Bug类型
严重程度 一般
优先级 P1
Bug状态 已关闭
业务部门 供应链管理中心
影响功能
开发责任人 许炯华
测试责任人 袁慧斌
解决时效 0.79
激活次数 0
激活日期
是否确认 是
当前指派 Closed 于 2026-08-26 11:06:06
截止日期 0000-00-00
上线时间 2026-08-20 17:07:23
上线时效 0.8
操作系统
浏览器
关键词
抄送给
所属迭代
相关需求
相关任务
由谁创建 袁慧斌 于 2026-08-20 16:19:35
影响环境 生产环境-业务反馈
由谁解决 许炯华 于 2026-08-20 17:07:13
解决版本 主干
解决方案 非BUG-纯属误判
由谁关闭 袁慧斌 于 2026-08-26 11:06:06
最后修改 袁慧斌 于 2026-08-26 11:06:06
相关Bug