我运行以下查询以从 Integer 值列表中检索第一个空值。这是一个ID列。
该列填充了过去几年的数据。主键约束未插入值,因此列表中存在间隙。
查询从列表中获取第一个空值:
SELECT top(1) h.HistoryID + 1
FROM History h
WHERE NOT EXISTS (SELECT * FROM History h2
WHERE h.HistoryID + 1 = h2.HistoryID)
ORDER BY h.HistoryID
只要列表有返回值(间隙),一切都会正常工作。
问题1 :当列表不再有间隙时会发生什么。这个查询会返回什么?
问题2 :如何更改查询以便在返回所有间隙后,返回列表末尾的第一个值?
示例:[1,3,4]。该查询将返回 2 作为第一个结果。但是当再次运行查询时,是否可以返回 5 ,再次 6 ,...?
答案 0 :(得分:0)
我在此工具上测试了查询:SqlFiddle
如果列表中没有任何间隙,则此帖子的问题部分中的给定查询确实会返回最大ID + 1 。
示例测试1 :
CREATE TABLE History ([HistoryID] int);
INSERT INTO History ([HistoryID]) VALUES(1), (3), (4);
查询将返回:
2
示例测试2 :
CREATE TABLE History ([HistoryID] int);
INSERT INTO History ([HistoryID]) VALUES(1), (2), (3), (4);
查询将返回:
5
感谢您对我的问题发表评论的用户的反馈和帮助