View Full Version : SQL Autoincrement zurückzetzen
mariupol1963
05-07-06, 09:36
Hallo,
ich habe eine Datei mit CREATE TABLE erstellt. Ein Feld wurde als ID definiert:
FeldID INTEGER GENERATED ALWAYS AS IDENTITY
(START WITH 1 , INCREMENT BY 1), ...
Danach habe ich ein Paar Testsätze hinzugefügt. Jetzt sind die weg (gelöscht) aber FeldID zählt weiter.
Wie kann ich das FeldId wieder auf 1 sätzen?
Vielen Dank im Voraus.
Sinn und Zweck der ID's ist es eben, eine eindeutige ID während des Lebenszyklusses der Tabelle zu liefern.
Ein zurücksetzen ist konzeptionell nicht vorgesehen, da die Eindeutigkeit sonst nicht gewährleistet werden kann.
Ein Zurücksetzen ist nur per "drop table" und erneutem "Create table" möglich.
mariupol1963
05-07-06, 09:46
Danke!
Schade, aber was sonst?
Hallo,
natürlich kann man auch eine Identity Column auf einen beliebigen Anfangs-Wert zurücksetzen und zwar ohne dass man die Tabelle löschen oder neu erstellen muss!
Die Identity column kann über ein ALTER TABLE-Statement auf einen beliebigen Wert gesetzt werden. In dem folgenden Beispiel wird der Start-Wert auf 10 zurückgesetzt.
ALTER TABLE MySchema/MyTable
ALTER COLUMN MyIdent restart with 10;
Birgitta
mariupol1963
05-07-06, 13:12
Vielen Dank Birgitta!
Klasse!
Das mit "restart" habe ich im "SQL Reference" nicht gefunden.
Sollte ich aber, denn das steht in
ALTER TABLE/identity-alteration
Nette Funktion. Bisher hab ich sowas immer mit einem Trigger realisiert. (Update <Table> set MyIderntity = (Select max(MyIdentity)+1) ...from <Table>).....
Das sollte wesentlich performanter sein.
Das sollte wesentlich performanter sein.
Es sollte vor allem dehalb performanter sein, weil:
1. Bei einem Aufruf eines Triggers ein dynamischer Programm-Aufruf mit dem kompletten Overhead.
2. Bei der Verwendung einer Identity Column oder eines Sequence-Object, erfolgt kein Datei-Zugriff, sondern eine bestimmte Anzahl an Werten wird in einem Datenbereich auf Vorrat gehalten und immer der nächste ausgegeben und wieder aufgefüllt.
Birgitta