ник: Панург
Если в таблице не было ранее пропусков ID (или это не важно), то данный запрос покажет все недостающие номера
SELECT qsel2.d
FROM (SELECT qsel.d
FROM (SELECT Clng(( D4.digit & D3.digit & D2.digit & D1.digit & D0.digit ) + 1) AS d
FROM Digits AS D0,
Digits AS D1,
Digits AS D2,
Digits AS D3,
Digits AS D4) AS qsel
WHERE qsel.d <= (SELECT Max(tbl.ID)
FROM tbl)) AS qsel2
LEFT JOIN tbl
ON qsel2.d = tbl.ID
WHERE tbl.ID Is Null;
|
В запросе используется запрос на объединение Digits (можно сделать таблицу вместо запроса), взятый из
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=535505&msg=5414410
SELECT TOP 1 0 AS digit FROM MSysObjects
UNION ALL
SELECT TOP 1 1 FROM MSysObjects
UNION ALL
SELECT TOP 1 2 FROM MSysObjects
UNION ALL
SELECT TOP 1 3 FROM MSysObjects
UNION ALL
SELECT TOP 1 4 FROM MSysObjects
UNION ALL
SELECT TOP 1 5 FROM MSysObjects
UNION ALL
SELECT TOP 1 6 FROM MSysObjects
UNION ALL
SELECT TOP 1 7 FROM MSysObjects
UNION ALL
SELECT TOP 1 8 FROM MSysObjects
UNION ALL
SELECT TOP 1 9 FROM MSysObjects;
|
ЗЫ. Запрос расчитан на то, что максимальное значение ID не превышает 100 000.