Ich habe gelesen, dass nach SQL Server 2000 die Möglichkeit, eine Identitätsspalte zu "entidentifizieren", entfernt wurde. Und dass dies "By Design" war (nicht nur eine fehlende Funktion).
Hier ist ein Beispiel, das ich in einem Blog gefunden habe . Dabei werden die Systemtabellen aktualisiert. (Und diese Fähigkeit wurde nach SQL Server 2000 entfernt.) Ich verstehe, dass dies keine gute Idee ist, dies über Systemtabellen zu tun. Ich frage mich nur, warum es keine Funktion gibt, um dies auf andere Weise zu tun.
Das zu umgehen wird mir eine beträchtliche Menge Arbeit verursachen. (Kopieren von vielen hundert Millionen Zeilen in neue Tabellen in einer Umgebung mit Ausfallzeitunverträglichkeit.)
Also dachte ich, ich würde fragen "Warum".
Was hat sich in SQL Server 2005 und späteren Versionen geändert, was dies zu einer schlechten Sache gemacht hat? Oder war es immer schlecht und einfach nicht abgeschlossen?
Welche "Best Practice" (oder ein ähnliches Prinzip) würde verletzt, wenn eine Identitätsspalte wieder zu einer normalen Spalte gemacht würde?
- -
Update zur Beantwortung der Anfrage "Warum mache ich das?":
Dies ist eine Zusammenfassung auf sehr hoher Ebene: Ich werde anfangen, meinen Tabellen Partitionen hinzuzufügen. (Damit ich alte Daten archivieren / löschen kann.) Das ist alles einfach. Gelegentlich muss ich jedoch einen Datensatz auf eine andere Partition verschieben, damit er nicht entfernt wird (wenn eine Partition zum Archivieren / Löschen angezeigt wird). (Ich habe meine Partitionierungsspalte um 2 erhöht, sodass immer Platz vorhanden ist, um die Zeile auf eine andere Partition zu verschieben.)
Wenn die Partitionierungsspalte jedoch eine Identitätsspalte ist, muss ich den Wert löschen und erneut einfügen (es gibt keine Möglichkeit, den Wert einer Identitätsspalte zu aktualisieren). Was Probleme mit der Replikation verursacht.
Ich möchte also eine Sequenz anstelle einer Identitätsspalte verwenden. Bei großen Datenbanken ist dieser Wechsel jedoch sehr, sehr schwierig.