Sql 当列表没有空值时会发生什么
我运行以下查询从整数值列表中检索第一个空值。它是一个ID列 这一栏充满了过去几年的数据。这些值不是由主键约束插入的,因此间隙在列表中 查询以从列表中获取第一个空值: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 只
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
。