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

Como obtenho o próximo número disponível de um SQL Server? (Não é uma coluna de identidade)


Eu acho que pela pergunta você está atrás do próximo disponível, embora isso possa não ser o mesmo que max+1 certo? - Nesse caso:

Comece com uma lista de inteiros e procure aqueles que não estão na coluna groupid, por exemplo:
;WITH CTE_Numbers AS (
    SELECT n = 2001
    UNION ALL
    SELECT n + 1 FROM CTE_Numbers WHERE n < 4000 
)
SELECT top 1 n 
FROM CTE_Numbers num
WHERE NOT EXISTS (SELECT 1 FROM MyTable tab WHERE num.n = tab.groupid)
ORDER BY n

Nota:você precisa ajustar o 2001/4000 valores no CTE para permitir o intervalo desejado. Eu assumi o nome da sua tabela por MyTable