Find the Missing Sequential Number From Table

  1. DECLARE @Minval INT ,@Maxval INT  
  2. DECLARE @Temp TABLE (ID SMALLINT ,Name VARCHAR(128))  
  3. INSERT INTO @Temp ( ID ,Name )  
  4. SELECT 1,'A' UNION ALL  
  5. SELECT 2,'B' UNION ALL  
  6. SELECT 3,'C' UNION ALL  
  7. SELECT 4,'D' UNION ALL  
  8. SELECT 7,'E' UNION ALL  
  9. SELECT 8,'F' UNION ALL  
  10. SELECT 10,'G' UNION ALL  
  11. SELECT 12,'H' UNION ALL  
  12. SELECT 13,'I' UNION ALL  
  13. SELECT 16,'J' UNION ALL  
  14. SELECT 17,'K' UNION ALL  
  15. SELECT 18,'L' UNION ALL  
  16. SELECT 20,'M' UNION ALL  
  17. SELECT 21,'N' UNION ALL  
  18. SELECT 22,'O' UNION ALL  
  19. SELECT 23,'P' UNION ALL  
  20. SELECT 24,'Q' UNION ALL  
  21. SELECT 25,'R' UNION ALL  
  22. SELECT 27,'S' UNION ALL  
  23. SELECT 28,'T' UNION ALL  
  24. SELECT 29,'U' UNION ALL  
  25. SELECT 30,'V' UNION ALL  
  26. SELECT 31,'W' UNION ALL  
  27. SELECT 33,'X' UNION ALL  
  28. SELECT 34,'Y' UNION ALL  
  29. SELECT 36,'Z'  
  30. SELECT @Minval=MIN(ID) ,@Maxval=MAX(ID) FROM @Temp  
  31. ;WITH GenNumber AS (  
  32. SELECT @Minval AS num  
  33. UNION ALL  
  34. SELECT num+1 FROM GenNumber WHERE num+1<=@Maxval  
  35. )  
  36. SELECT num FROM GenNumber X WHERE NOT EXISTS (SELECT * FROM @Temp Y WHERE X.num=Y.ID)  
  37. OPTION (MAXRECURSION 10000)