J'ai une table avec une colonne IDENTITY. Pendant le développement, je supprime les lignes de temps en temps et les ajoute à nouveau. Mais les valeurs IDENTITY ont toujours augmenté et n'ont pas commencé à partir de 1 lorsque je les ai ajoutées à nouveau. Maintenant, mon identifiant passe de 68 -> 92 et cela bloque mon code.
Comment réinitialiser la valeur IDENTITY?
Vous pouvez réinitialiser la valeur d'identité en
DBCC CHECKIDENT('tableName', RESEED, 0)
La prochaine fois que vous insérerez dans TableName, la valeur d'identité insérée sera 1.
Lorsque vous supprimez des lignes du tableau, il ne réinitialisera pas la valeur d'identité, mais il continuera à l'augmenter. Tout comme ce qui s'est passé dans votre cas.
Maintenant, lorsque vous tronquez le tableau, il réinitialisera la valeur d'identité à sa valeur d'origine Seed du tableau).
Reportez-vous à: SQL SERVER - DELETE, TRUNCATE et RESEED Identity pour un exemple détaillé et une bonne explication de Différence entre Truncate et Delete
Kin vous a montré comment réinitialiser la valeur IDENTITY, mais en dehors d'un environnement de développement lorsque vous supprimez vraiment tout des données, pourquoi avez-vous besoin de faire cela?
J'espère que vous n'avez pas l'intention de maintenir une séquence contiguë de valeurs IDENTITY lorsque vous êtes en production. Et j'espère que vous n'écrivez pas vraiment votre code pour coder en dur les valeurs IDENTITY. S'il s'agit de valeurs d'ID significatives, vous devez cesser d'utiliser la propriété IDENTITY.
Il y a quelques choses qui empêcheront cela de se produire:
En bref, si vous vous souciez des lacunes ou souhaitez donner un sens spécifique à ces valeurs, arrêtez d'utiliser IDENTITY. Supprimez et recréez la table et lorsque vous devez supprimer les valeurs et recharger, effectuez une mise à jour ou effectuez une insertion avec des valeurs codées en dur pour cette colonne.
En passant, la clé primaire et l'identité ne sont pas la même chose. Une colonne d'identité n'est pas une clé primaire sauf si vous la définissez explicitement comme telle, et vous pouvez certainement avoir une clé primaire qui n'est pas une colonne d'identité.