Avez-vous déjà rencontré une situation où vous supprimez des lignes d’une table avec une colonne d’identité, pour constater que les nouvelles lignes que vous insérez commencent à partir de la valeur d’identité suivante, créant ainsi un écart dans la séquence ? Cela peut poser problème si votre application exige que toutes les identités soient en séquence. Dans cet article, nous discuterons d’une solution simple pour éviter les écarts dans les colonnes d’identité dans SQL Server.
Prenons en compte un scénario où un développeur avait une table avec une colonne d’identité et devait supprimer quelques lignes. Après avoir supprimé les lignes et inséré de nouvelles, il a remarqué que les identités commençaient à partir de la valeur suivante, créant ainsi un écart. Cela n’était pas acceptable pour leur application.
La solution à ce problème consiste à utiliser deux astuces SQL supplémentaires : réinitialiser la colonne d’identité. Examinons un exemple pour comprendre comment cela fonctionne.
USE AdventureWorks
/* Créer une table avec une colonne d'identité */
CREATE TABLE TableID (
ID INT IDENTITY (1, 1),
Col VARCHAR(10)
)
/* Insérer 10 enregistrements avec la première valeur */
INSERT INTO TableID (Col) VALUES ('Premier')
/* Vérifier les enregistrements dans la table */
SELECT * FROM TableID
/* Supprimer les derniers enregistrements */
DELETE FROM TableID WHERE ID IN (8, 9, 10)
/* Vérifier les enregistrements dans la table */
SELECT * FROM TableID
/* Obtenir la valeur maximale actuelle et réinitialiser la table */
DECLARE @MaxID INT
SELECT @MaxID = MAX(ID) FROM TableID
DBCC CHECKIDENT ('TableID', RESEED, @MaxID)
/* Insérer 10 enregistrements avec la deuxième valeur */
INSERT INTO TableID (Col) VALUES ('Deuxième')
/* Vérifier les enregistrements dans la table */
SELECT * FROM TableID
/* Nettoyer la base de données */
DROP TABLE TableID
Dans l’exemple ci-dessus, nous créons une table avec une colonne d’identité et insérons 10 enregistrements avec la première valeur. Nous supprimons ensuite les derniers enregistrements, ce qui crée un écart dans la colonne d’identité. Pour corriger cela, nous utilisons la commande DBCC CHECKIDENT
pour réinitialiser la table avec la valeur d’identité maximale. Enfin, nous insérons 5 enregistrements avec la deuxième valeur.
En suivant cette approche, vous pouvez vous assurer que votre colonne d’identité reste en séquence sans aucun écart. Cela peut être particulièrement utile dans les scénarios où maintenir une séquence continue est crucial pour votre application.
J’espère que cette solution est claire pour tous mes lecteurs, et que vous pouvez l’utiliser pour éviter les problèmes liés aux écarts dans les colonnes d’identité. Si vous avez des commentaires ou avez besoin d’explications supplémentaires, n’hésitez pas à me contacter.