列表没有空值时会发生什么

时间:2017-04-11 08:04:35

标签: sql sql-server

我运行以下查询以从 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 ,...?

1 个答案:

答案 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

感谢您对我的问题发表评论的用户的反馈和帮助