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

SQL Server中删除记录后重置分组优先级的SQL实现方案

重置TestRule表各template_id下的连续优先级

现有TestRule表中,每条记录关联template_id,原本每个template_id分组内的priority为连续递增序列。在删除rule_id为2和5的记录后,部分分组的priority出现断层(例如template_id=100下的priority变为1、3),可通过以下SQL高效重置分组内的priority为连续的1、2、3...,无需后端处理:

全局重置所有分组的优先级

WITH RankedRules AS (
    SELECT 
        rule_id,
        ROW_NUMBER() OVER (PARTITION BY template_id ORDER BY priority) AS new_priority
    FROM TestRule
)
UPDATE TestRule
SET priority = rr.new_priority
FROM TestRule tr
INNER JOIN RankedRules rr ON tr.rule_id = rr.rule_id;

仅重置创建日期超一周的记录

如果只需处理创建日期超过一周的记录,可在CTE中添加筛选条件:

WITH RankedRules AS (
    SELECT 
        rule_id,
        ROW_NUMBER() OVER (PARTITION BY template_id ORDER BY priority) AS new_priority
    FROM TestRule
    WHERE create_date < DATEADD(day, -7, GETDATE())
)
UPDATE TestRule
SET priority = rr.new_priority
FROM TestRule tr
INNER JOIN RankedRules rr ON tr.rule_id = rr.rule_id;

说明

  • 利用ROW_NUMBER()窗口函数,按template_id分组、原priority排序生成连续序号,确保新优先级与原顺序一致
  • 通过CTE关联原表更新,避免多次扫描表,效率优于后端循环处理方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:20:57