Nachträgliches Anlegen einer ID
LeKuchen
- datenbank
Hallo zusammen,
ich möchte gerne nachträglich eine Spalte mit IDs in einer Datenbanktabelle (MSSQL) einfügen.
Ich könnte jetzt natürlich ein Programm basteln und mit einem Zähler und einer Schleife einzeln die Datensätze updaten.
Aber: Geht das nicht auch mit _einem_ SQL Statement? Folgendes führt nicht ganz zum gewünschten Ergebnis:
UPDATE [t:Personen] SET ID2006 = ((SELECT MAX(ID2006) FROM [t:Personen]) + 1)
Hier wird das SubSelect leider nur einmal ausgeführt und nicht bei jedem UPDATE...
Stehe auf dem Schlauch, jemand eine Idee?
LeKuchen
P.S.: Es geht nicht um das nachträgliche Hinzufügen einer Primary Key Spalte a la
CREATE [UNIQUE] INDEX Indexname ON
Tabelle (Feldname[(length]),...)
Die ID soll ab einem bestimmten Wert hochgezählt werden - die Spalte dafür ist bereits in der DB vorhanden.
LeKuchen
Hallo Lekuchen,
P.S.: Es geht nicht um das nachträgliche Hinzufügen einer Primary Key Spalte a la
CREATE [UNIQUE] INDEX Indexname ON
Tabelle (Feldname[(length]),...)
Damit fügst du ja auch keine Spalte ein sondern nur eine Beschränkung
auf Eindeutigkeit und einen Index auf selbige Spalte.
Du könntest einfach ALTER TABLE verwenden:
ALTER TABLE MyTable
ADD MyNewIdentityColumn int IDENTITY(#MyStartValue#, #MyIncrementValue#) NOT NULL
Ein ALTER TABLE ALTER COLUMN geht nicht. Du
müsstest vorher die Spalte droppen.
Ausserdem hast du keinen wirklichen Einfluss in welcher Reihenfolge
die neuen Identity Werte eingefügt werden, ich tippe gemäss der bestehenden Ordnung durch den Clustered Key der Tabelle.
Cheerio, Frank
Hi LeKuchen
UPDATE [t:Personen] SET ID2006 = ((SELECT MAX(ID2006) FROM [t:Personen]) + 1)
Also, zu diesem Zeitpunkt gibt es nur einen Max-Wert. Dieser wird genommen, 1 dazu gezählt und dann dieser neue Wert allen Einträgen der ID2006-Spalte gegeben.
Unter Oracle kannst Du eine Sequenz definieren, ähnlich einer fortlaufenden Nummer. Bei dieser Sequenz kannst Du unter anderem einen Startwert angeben. Vielleicht klappt das bei MySQL auch.
Gruß
Hans