J'ai supprimé quelques enregistrements d'une table dans une base de données SQL Server.
Les identifiants du tableau se présentent comme suit :
99 100 101 1200 1201...
Je souhaite supprimer les derniers enregistrements (ID >1200), puis réinitialiser l'incrémentation automatique afin que le prochain ID autogénéré soit 102. Mes enregistrements sont donc séquentiels. Existe-t-il un moyen de faire cela dans SQL Server ?
69 votes
S'il vous plaît, ne dites pas "Ne le faites pas". Je déteste quand je demande comment faire quelque chose et que tout ce que je reçois, c'est "ne le faites pas". Oui, la réinitialisation de l'identité peut causer des problèmes de clés étrangères, mais seulement si vous ne connaissez pas votre base de données et que vous ne programmez pas en conséquence. Il existe de très bonnes raisons de réinitialiser une identité après une suppression programmée - ce sont les auditeurs. Les auditeurs détestent voir des lacunes, alors remplissez-les, faites-le de manière contrôlée et assurez-vous que les contraintes des clés étrangères sont maintenues.
7 votes
@spyder, saviez-vous que vous aurez des lacunes si l'insertion d'un enregistrement est annulée, et pas seulement pour la suppression ? Vous ne pouvez pas éviter les lacunes avec un autoincrément et il est stupide d'essayer. J'ai travaillé pour une agence d'audit et les auditeurs compétents peuvent se faire expliquer cela. En outre, si vous disposez de tables d'audit appropriées, ils peuvent voir ce qu'il est advenu de ces enregistrements. Ou si, pour des raisons juridiques, il ne doit jamais y avoir de lacunes (il y a quelques cas de ce genre), alors seul un développeur incompétent utiliserait un autoincrément et les auditeurs seraient, à juste titre, contrariés.