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

如何在只读权限下查找自增列seqno中的缺失值?

查找identity列中的缺失数值

你的原SQL无法正确返回所有缺失值,原因是ROW_NUMBER()仅对现有行进行连续编号,只能定位到seqno与行号不匹配的位置,无法生成中间所有缺失的连续数值。比如你的示例数据中,原SQL会返回2、5、6,但漏掉了9,且无法把5、6拆分为两个独立的缺失值。

正确解决方案(递归CTE法)

利用递归CTE生成从seqno最小值到最大值的所有连续数字,再与原表左连接筛选出未匹配的数值:

WITH num_sequence AS (
    SELECT MIN(seqno) AS num
    FROM trnmast
    UNION ALL
    SELECT num + 1
    FROM num_sequence
    WHERE num < (SELECT MAX(seqno) FROM trnmast)
)
SELECT num AS missing_seqno
FROM num_sequence
LEFT JOIN trnmast ON num_sequence.num = trnmast.seqno
WHERE trnmast.seqno IS NULL
OPTION (MAXRECURSION 0); -- 当seqno范围超过100时必须添加此选项

说明

  • 递归CTEnum_sequence会生成从表中最小seqno到最大seqno的所有连续整数。
  • 左连接原表后,trnmast.seqno IS NULL的行即为缺失的数值,对应你的示例会返回2、5、6、9。
  • 此方法无需修改表或创建临时对象,仅需只读权限即可执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:35:33