J'ai lu qu'après SQL Server 2000, la possibilité de «désidentifier» une colonne d'identité a été supprimée. Et que c'était "By Design" (pas seulement une fonctionnalité manquante).
Voici un exemple que j'ai trouvé sur un blog . Il s'agit de mettre à jour les tables système. (Et cette capacité a été supprimée après SQL Server 2000.) Je comprends que faire cela via des tables système n'est pas une bonne idée. Je me demande simplement pourquoi une fonctionnalité permettant de faire cela d'une autre manière n'existe pas.
Travailler autour de cela va me causer beaucoup de travail. (Copie de plusieurs centaines de millions de lignes dans de nouvelles tables dans un environnement intolérant aux temps d'arrêt.)
J'ai donc pensé demander "Pourquoi".
Qu'est-ce qui a changé dans Sql Server 2005 et les versions ultérieures qui en ont fait une mauvaise chose? Ou était-ce toujours mauvais, et tout simplement pas verrouillé?
Quelle «meilleure pratique» (ou principe similaire) serait violée en faisant à nouveau d'une colonne d'identité une colonne normale?
-
Mise à jour pour répondre à la demande "pourquoi je fais cela":
Ceci est un résumé de très haut niveau: je vais commencer à ajouter des partitions à mes tables. (Pour que je puisse archiver / purger les anciennes données.) C'est très simple. Mais j'ai parfois besoin de déplacer un enregistrement vers une partition différente afin qu'il ne soit pas supprimé (lorsqu'une partition arrive pour archivage / suppression). (Je fais augmenter ma colonne de partitionnement de 2 afin qu'il y ait toujours de l'espace pour déplacer la ligne vers une autre partition.)
Mais si la colonne de partitionnement est une colonne d'identité, je dois supprimer et réinsérer la valeur (il n'y a aucun moyen de mettre à jour la valeur d'une colonne d'identité). Ce qui provoque des problèmes de réplication.
Je souhaite donc utiliser une séquence au lieu d'une colonne d'identité. Mais ce commutateur est très très difficile sur les grandes bases de données.