Cílem je podívat se, kde začínají mezery. Předpokládejme, že používáte SQL Server 2012 a máte také lag() a lead() funkcí. Následující dostane další id :
select t.*, lead(id) over (order by id) as nextid
from t;
Pokud je mezera, pak nextid <> id+1 . Nyní můžete mezery charakterizovat pomocí where :
select id+1 as FirstMissingId, nextid - 1 as LastMissingId
from (select t.*, lead(id) over (order by id) as nextid
from t
) t
where nextid <> id+1;
EDIT:
Bez lead() , udělal bych to samé s korelovaným poddotazem:
select id+1 as FirstMissingId, nextid - 1 as LastMissingId
from (select t.*,
(select top 1 id
from t t2
where t2.id > t.id
order by t2.id
) as nextid
from t
) t
where nextid <> id+1;
Za předpokladu id je primární klíč v tabulce (nebo dokonce že má jen index), obě metody by měly mít přiměřený výkon.