查找SQL数据库中的漏洞

查找SQL数据库中的漏洞,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个数据库,其中包含有关仪器的基本信息。每个仪表都有仪表id 000000-999999,这是其唯一标识符。我需要在仪器ID上找到一些孔。我是否可以编写SQL查询来查找仪器id列中的间隙?如果我能找到丢失仪器最多的最大孔,那将非常有帮助。我已经到处寻找这个问题的答案,但似乎大多数解决方案都涉及两个带有连接的表,其中这个实例仅在一个表上。谢谢 这可以是一个开始: ; WITH Instrument AS ( SELECT Id FROM ( VALU

我有一个数据库,其中包含有关仪器的基本信息。每个仪表都有仪表id 000000-999999,这是其唯一标识符。我需要在仪器ID上找到一些孔。我是否可以编写SQL查询来查找仪器id列中的间隙?如果我能找到丢失仪器最多的最大孔,那将非常有帮助。我已经到处寻找这个问题的答案,但似乎大多数解决方案都涉及两个带有连接的表,其中这个实例仅在一个表上。谢谢

这可以是一个开始:

;
WITH    Instrument  AS
(       SELECT  Id
        FROM    ( VALUES
                ( 01 ),
                ( 02 ),
                ( 03 ),
                ( 05 ),
                ( 09 ),
                ( 10 ) ) AS Sample (Id)

),      Sequence AS
(       SELECT  MIN(Id) Start,
                MAX(Id) Finish
        FROM    Instrument
        UNION ALL
        SELECT  Start + 1,
                Finish
        FROM    Sequence
        WHERE   Start < Finish
)
SELECT      Sequence.Start
FROM        Sequence
LEFT JOIN   Instrument
        ON  Sequence.Start = Instrument.Id
WHERE       Instrument.Id IS NULL

我会担心递归CTE和自反半联接将如何在具有数十万行的表上执行。我认为它的伸缩性会更好。我可能会使用一个左连接到数据表的计数表。数据表中ID匹配的任何空值都是数据中的漏洞。非常容易理解,而不是递归。谢谢!马丁-史密斯链接工作得很好。对于任何其他可能想要使用它的人,如果不需要,请从查询中删除WHERE status=0。