J'ai récemment hérité d'une base de données sur laquelle l'une des tables a la clé primaire composée de valeurs codées (Part1 * 1000 + Part2).
J'ai normalisé cette colonne, mais je ne peux pas changer les anciennes valeurs. Alors maintenant j'aiComment trouver des "trous" dans un tableau
select ID from table order by ID
ID
100001
100002
101001
...
Je veux trouver les « trous » dans la table (plus précisément, le premier « trou » après 100000) pour les nouvelles lignes.
J'utilise la sélection suivante, mais existe-t-il une meilleure façon de le faire?
select /* top 1 */ ID+1 as newID from table
where ID > 100000 and
ID + 1 not in (select ID from table)
order by ID
newID
100003
101029
...
La base de données est Microsoft SQL Server 2000. Je suis d'accord pour utiliser des extensions SQL.
Juste par curiosité, quelle est la motivation pour trouver ces "trous"? Est-ce une clé intelligente? –
La base de données est pour le système de contrôle d'accès à mon travail. Dans l'ancienne base de données, Part1 était un code d'entreprise et Part2 un code d'employé. Si une personne change d'entreprise, une nouvelle carte lui sera délivrée. Le système de lecture de cartes a besoin de 6 chiffres, donc les nouvelles cartes commencent à 100 000, excluant les cartes existantes. – pmg