Ich möchte einer vorhandenen Legacy- Datenbank eine Spalte hinzufügen und eine Prozedur schreiben , mit der ich jedem Datensatz einen anderen Wert zuweisen kann. So etwas wie das Hinzufügen einer Spalte und das automatische Generieren der Daten dafür.
Wenn ich beispielsweise eine neue Spalte mit dem Namen "ID" (Nummer) hinzufüge, möchte ich jedem Datensatz einen eindeutigen Wert zuweisen. Meine ID- Spalte enthält also Datensätze von beispielsweise 1 to 1000
.
Wie mache ich das?
sql
sql-server
Adhip Gupta
quelle
quelle
Antworten:
Dies hängt von der Datenbank ab. Für SQL Server kann dies jedoch wie folgt erreicht werden:
quelle
Prevent saving changes that require table re-creation
deaktivieren, können Sie auch mithilfe der Option eine Identitätsspalte hinzufügen gui.Es wäre hilfreich, wenn Sie die von Ihnen verwendete SQL-Datenbank veröffentlichen würden. Für MySQL möchten Sie wahrscheinlich auto_increment:
Ich bin mir nicht sicher, ob dies die Werte rückwirkend anwendet. Wenn dies nicht der Fall ist, sollten Sie nur in der Lage sein, Ihre Werte mit einer gespeicherten Prozedur oder in einem einfachen Programm zu durchlaufen (solange niemand anderes in die Datenbank schreibt) und die
LAST_INSERT_ID()
Funktion zum Generieren des ID-Werts zu verwenden.quelle
Für Orakel könnte man so etwas wie unten machen
quelle
Und das Postgres-Äquivalent (die zweite Zeile ist nur obligatorisch, wenn "id" ein Schlüssel sein soll):
quelle
Nur die Verwendung einer ALTER TABLE sollte funktionieren. Fügen Sie die Spalte mit dem richtigen Typ und einem IDENTITY-Flag hinzu, und es sollte den Trick tun
Lesen Sie diesen MSDN-Artikel http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx über die ALTER TABLE-Syntax
quelle
Versuchen Sie dies für den Datentyp UNIQUEIDENTIFIER in SQL Server
Wenn Sie einen Primärschlüssel aus dieser Spalte erstellen möchten, verwenden Sie diesen
quelle
Hängt von der Datenbank ab, da jede Datenbank eine andere Möglichkeit hat, Sequenznummern hinzuzufügen. Ich würde die Tabelle ändern, um die Spalte hinzuzufügen, und dann ein DB-Skript in groovy / python / etc schreiben, um die Daten einzulesen und die ID mit einer Sequenz zu aktualisieren. Sobald die Daten festgelegt wurden, würde ich der Tabelle eine Sequenz hinzufügen, die nach der obersten Nummer beginnt. Stellen Sie nach dem Einstellen der Daten die Primärschlüssel richtig ein.
quelle
Wenn Sie nicht möchten, dass Ihre neue Spalte vom Typ ist
IDENTITY
(automatische Inkrementierung), oder wenn Sie genau festlegen möchten, in welcher Reihenfolge Ihre Zeilen nummeriert sind, können Sie eine Spalte vom Typ hinzufügenINT NULL
und diese dann wie folgt füllen. In meinem Beispiel heißt die neue Spalte MyNewColumn und die vorhandene Primärschlüsselspalte für die Tabelle heißt MyPrimaryKey.Dies funktioniert in SQL Server 2005 und höher, dh in Versionen, die dies unterstützen
ROW_NUMBER()
quelle