ID为自增列~
id name
1 a
2 b
4 c
5 d
8 e
9 f
可以看出 缺少了 ID为 3,6,7 的数据
怎样在新增 的数据 g 时 找到最小的缺省ID 并组合成 3 'g' 插入到表中。
PS: ID不一定是数据库定义的自增列,可以只是用户主观上的定义。重点是如何找到缺省ID的值。
...全文
3036打赏收藏
SQL 自增列查询缺省值
如 有表 KKK 数据是 : ID为自增列~ id name 1 a 2 b 4 c 5 d 8 e 9 f 可以看出 缺少了 ID为 3,6,7 的数据 怎样在新增 的数据 g 时 找到最小的缺省ID 并组合成 3 'g' 插入到表中。 PS: ID不一定是数据库定义的自增列,可以只是用户主观上的定义。重点是如何找到缺省ID的值。
自己解决了 利用 row_number 函数可以解决
select a.rn from
(SELECT ROW_NUMBER() over (order by id) rn FROM SysObjects) a
where rn between (select MIN(id) from KKK) and (select MAX(id) from KKK)
and rn not in (select ID from KKK)
首先要把缺的号查出来,给你个列子,具体的自己写吧
--测试数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',2
UNION ALL SELECT 'a',3
UNION ALL SELECT 'a',6
UNION ALL SELECT 'a',7
UNION ALL SELECT 'a',8
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',5
UNION ALL SELECT 'b',6
UNION ALL SELECT 'b',7
GO
--缺号分布查询
SELECT a.col1,start_col2=a.col2+1,
end_col2=(
SELECT MIN(col2) FROM tb aa
WHERE col1=a.col1 AND col2>a.col2
AND NOT EXISTS(
SELECT * FROM tb WHERE col1=aa.col1 AND col2=aa.col2-1))
-1
FROM(
SELECT col1,col2 FROM tb
UNION ALL --为每组编号补充查询起始编号是否缺号的辅助记录
SELECT DISTINCT col1,0 FROM tb
)a,(SELECT col1,col2=MAX(col2) FROM tb GROUP BY col1)b
WHERE a.col1=b.col1 AND a.col2<b.col2 --过滤掉每组数据中,编号最大的记录
AND NOT EXISTS(
SELECT * FROM tb WHERE col1=a.col1 AND col2=a.col2+1)
ORDER BY a.col1,start_col2
/*--结果
col1 start_col2 end_col2
-------------- -------------- -----------
a 1 1
a 4 5
b 2 4