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?
Réponses:
Vous pouvez réinitialiser la valeur d'identité en
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.
Désormais, lorsque vous tronquez la table, elle réinitialisera la valeur d'identité à sa valeur d'origine de la table.
Reportez-vous à: SQL SERVER - DELETE, TRUNCATE et RESEED Identity pour un exemple détaillé et une bonne explication de la différence entre Truncate et Delete
la source
Kin vous a montré comment réinitialiser la valeur IDENTITY, mais en dehors d'un environnement de développement lorsque vous supprimez vraiment toutes les données, pourquoi avez-vous besoin de le faire?
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:
ne sera pas corrigé tant que SQL Server 2014ne sera jamais corrigé (sauf si vous utilisez un indicateur de trace non documenté et très coûteux) par lequel un redémarrage semblera rejeter jusqu'à 1000 valeurs de votre colonne IDENTITY . Le bogue sur Connect suggère que cela est limité aux événements de basculement impliquant des groupes de disponibilité, mais je peux vous assurer que le bogue est beaucoup plus large que cela.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.
Soit dit 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é.
la source
Si vous avez seulement besoin d'éliminer les dernières lignes qui n'ont pas suivi la valeur incrémentielle d'un champ d'identité, il existe un moyen simple et sûr:
et vous avez terminé.
la source