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

Sql 当列表没有空值时会发生什么,sql,sql-server,Sql,Sql Server,我运行以下查询从整数值列表中检索第一个空值。它是一个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 只

我运行以下查询从整数值列表中检索第一个空值。它是一个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,…?

我在这个工具上测试了查询:

当列表中不再有空白时,本文问题部分中的给定查询将返回max ID+1

示例测试1

CREATE TABLE History ([HistoryID] int);

INSERT INTO History ([HistoryID]) VALUES(1), (3), (4);
CREATE TABLE History ([HistoryID] int);

INSERT INTO History ([HistoryID]) VALUES(1), (2), (3), (4);
查询将返回:

二,

示例测试2

CREATE TABLE History ([HistoryID] int);

INSERT INTO History ([HistoryID]) VALUES(1), (3), (4);
CREATE TABLE History ([HistoryID] int);

INSERT INTO History ([HistoryID]) VALUES(1), (2), (3), (4);
查询将返回:

五,


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

您做过任何测试吗?创建表,插入值1和值3。执行查询-发生了什么?再次执行它,等等。我在Azure SQL Server/数据库上执行了它,而不是在本地。问题是我不能创建一个新表(Azure SQL数据库)来用一个小列表来测试这一点。此外,我的设备上没有安装本地测试所需的程序。您可以使用来运行一些基本测试。您可以在www.rextester.com上进行一些实验。当填补所有空白时,您的查询始终会得到
maxId+1