09
nov.
2007
par
Styx31
Classé sous : Développement, Sql Server
Dans la famille "on en apprend tous les jours", aujourd'hui, l'utilisation des colonnes de type IDENTITY comme compteur dans une table.
Je ne le savais donc pas (la faute, je trouve, à la documentation totalement inexistante à ce propos), mais l'incrémentation des valeurs des colonnes IDENTITY sous Sql Server est totalement déconnectée de toute notion de transaction.
Conséquence directe : si vous effectuez un rollback après une insertion dans une table avec une colonne identité, la valeur du compteur sera consommée et perdue pour la ligne suivante (vous aurez donc un trou dans votre séquence).
Autant la documentation semble parler de trous pouvant survenir lorsque l'on efface des lignes (ce que je conçois tout à fait), autant il m'a fallu me retrouver devant le fait accompli pour constater cette limitation.
Conclusion (on avait déjà quelques tables se servant d'un compteur interne pour générer la séquence, donc on va juste accélérer la migration vers ce mécanisme), n'utilisez pas les colonnes IDENTITY si vous souhaitez avoir une vrai séquence sans trous (même si vous n'effacez pas vos lignes !).