Ho letto che dopo SQL Server 2000 è stata rimossa la possibilità di "annullare l'identità" di una colonna di identità. E che questa era "In base alla progettazione" (non solo una caratteristica mancante).
Ecco un esempio che ho trovato su un blog . Implica l'aggiornamento delle tabelle di sistema. (E questa capacità è stata rimossa dopo SQL Server 2000.) Capisco che farlo tramite le tabelle di sistema non sia una buona idea. Mi sto solo chiedendo perché una funzione per farlo in un altro modo non sia presente.
Lavorare intorno a questo mi farà lavorare molto. (Copia di centinaia di milioni di righe su nuove tabelle in un ambiente intollerante ai tempi di inattività.)
Quindi ho pensato di chiedere "Perché".
Che cosa è cambiato in SQL Server 2005 e nelle versioni successive che lo hanno reso negativo? O è sempre stato male, e semplicemente non bloccato?
Quale "Best Practice" (o principio simile) verrebbe violato trasformando nuovamente una colonna di identità in una colonna normale?
-
Aggiornamento per rispondere alla richiesta di "perché lo sto facendo":
questo è un riepilogo di altissimo livello: inizierò ad aggiungere partizioni alle mie tabelle. (In modo che io possa archiviare / eliminare i vecchi dati.) È tutto facile. Ma ogni tanto ho bisogno di spostare un record in una diversa partizione in modo che non venga rimosso (quando viene visualizzata una partizione per l'archiviazione / eliminazione). (Sto avendo la mia colonna di partizionamento aumentare di 2 in modo che ci sia sempre spazio per spostare la riga in una diversa partizione.)
Ma se la colonna di partizionamento è una colonna di identità, allora devo eliminare e reinserire il valore (non c'è modo di aggiornare il valore di una colonna di identità). Che causa problemi con la replica.
Quindi voglio usare una sequenza invece di una colonna identità. Ma questo passaggio è molto difficile su database di grandi dimensioni.