Encontrando ID´s faltantes

Uma duvida que é muito comum entre desenvolvedores de banco de dados SQL Server é como encontrar os ID´s que estão faltando em uma tabela.

A partir do SQL Server 2008, essa tarefa ficou mais facil com a utilização de CTE (Comum Table Expression).

Abaixo segue um exemplo bem simples que pode ser aplicado para qualquer tabela fazendo as devidas adaptações:

--CRIAÇÃO DA TABELA
DECLARE @t1 TABLE (id INT)

--CARGA DE DADOS
INSERT INTO @t1 VALUES
(1),(2),(3),(4),(8),(20),(22)

--QUERY
;WITH Lacunas (faltante, maxid)
AS
(
 SELECT 1 AS faltante, (select max(id) from @t1)
 UNION ALL
 SELECT faltante + 1, maxid FROM Lacunas
 WHERE faltante < maxid
)
SELECT faltante
FROM Lacunas
LEFT OUTER JOIN @t1 t1 on t1.id = Lacunas.faltante
WHERE t1.id is NULL

Anúncios
Post a comment or leave a trackback: Trackback URL.

Comentários

  • Roberson Ferreira  On 20/06/2011 at 14:01

    Fabrizzio, show de bola esta dica. E parabéns pelo blog. Espero que tenha muito sucesso. Abs.

    Roberson Ferreira.

  • Anônimo  On 20/06/2011 at 21:16

    Fabrizzio adorei suas respostas, me foram muito uteis, obrigada e sempre vou acessar seu blog e recomendar tambem. Abs.

    Shirley

  • Anônimo  On 27/06/2011 at 12:12

    AS DICAS E SOLUÇÕES CITADAS EM SEU BLOG ME FORAM MUITO UTEIS

    WLADIMIR

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: