Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Réinitialiser la clé primaire (int comme identité)

La valeur maximale pour un bigint est 9 223 372 036 854 775 807 . Si vous aviez atteint 8 chiffres en une journée, il vous faudrait encore 10 jours pour atteindre le maximum. C'est comme 25 millions d'années.

En supposant que vous souhaitiez toujours réinitialiser la colonne, la première question que je me pose est la suivante :l'ordre des lignes est-il important ? Cela signifie-t-il que vous vous fiez au fait que la ligne 1000 précède 1100 pour, par exemple, un ordre chronologique ou autrement absolu ? Sinon, c'est simple :supprimez la colonne et ajoutez-la à nouveau. Hé hop, nouvelles valeurs.

Si vous avez besoin de maintenir l'ordre, vous devrez le faire un peu plus soigneusement :

  1. Verrouiller la table ;
  2. Modifiez le type pour qu'il ne soit plus incrémenté automatiquement ;
  3. Créez une nouvelle colonne. Vous feriez mieux de ne pas avoir d'index pour le moment, car la mise à jour de l'index ralentira les insertions ;
  4. Renseignez les valeurs dans la seconde avec une boucle quelconque incrémentant un compteur (comme l'astuce rownum de SQL Server) ordonnant les insertions pour qu'elles correspondent à l'ordre d'origine ;
  5. Remplacez l'ancienne colonne par la nouvelle ;
  6. Réinitialiser l'auto-incrémentation et l'état de la clé primaire.