Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Encontre o menor número não utilizado no SQL Server


Encontre a primeira linha onde não existe uma linha com Id + 1
SELECT TOP 1 t1.Id+1 
FROM table t1
WHERE NOT EXISTS(SELECT * FROM table t2 WHERE t2.Id = t1.Id + 1)
ORDER BY t1.Id

Editar:

Para lidar com o caso especial em que o menor id existente não é 1, aqui está uma solução feia:
SELECT TOP 1 * FROM (
    SELECT t1.Id+1 AS Id
    FROM table t1
    WHERE NOT EXISTS(SELECT * FROM table t2 WHERE t2.Id = t1.Id + 1 )
    UNION 
    SELECT 1 AS Id
    WHERE NOT EXISTS (SELECT * FROM table t3 WHERE t3.Id = 1)) ot
ORDER BY 1