这里有很多不同的方法是由于使用窗口函数而可能很受欢迎。
;WITH cte AS (
SELECT
Id
,[Number]
,LAG([Number],1,NULL) OVER (ORDER BY [Number] ASC) AS LagValue
FROM
@Table
)
SELECT
MIN(LagValue) + 1 AS SmallestNumberAfterGap
FROM
cte
WHERE
LagValue <> [Number] - 1
这里是一个是使用LEFT JOIN
SELECT
MIN(t2.[Number]) + 1 AS SmallestNumberAfterGap
FROM
@Table t1
LEFT JOIN @Table t2
ON t1.Number + 1 = t2.Number
而且因为我只是在这里写更多的代码,代码的总体较少是一个使用EXISTS
SELECT
MIN(t1.Number) + 1 AS SmallestNumberAfterGap
FROM
@Table t1
WHERE
NOT EXISTS (SELECT * FROM @Table t2 WHERE t1.Number + 1 = t2.Number)
这里是一个链接显示全部3个功能运作 http://rextester.com/TIFRI87282
你需要的只是数字或整行吗? – Serg