2017-04-11 30 views
0

我运行下面的查询检索来自整数值的列表中的第一个空值。它是一个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]。作为第一个结果,查询将返回。但后来当查询再次运行,是否有可能返回,再次,...?

+1

你有没有做任何测试的用户?创建表,插入值1和值3.执行查询 - 发生了什么?再次执行它等。 – jarlh

+0

我已经在Azure SQL Server /数据库上完成了它,而不是在本地。问题是我无法创建一个新表(Azure SQL数据库)来测试这个小列表。此外,我没有在我的设备上安装的程序在本地执行。 – user3004449

+1

您可以使用http://sqlfiddle.com运行一些基本测试。 – jarlh

回答

0

我测试了这个工具查询:SqlFiddle

在这个职位的问题部分给出的查询确实会返回最大ID + 1当列表中不再有没有缝隙。

实施例试验1

CREATE TABLE History ([HistoryID] int); 

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

该查询将返回:

实施例试验2

CREATE TABLE History ([HistoryID] int); 

INSERT INTO History ([HistoryID]) VALUES(1), (2), (3), (4); 

查询将返回:

感谢您的反馈和帮助谁对我的问题发表意见的