it-swarm.com.de

Fügen Sie der vorhandenen Tabelle eine Spalte hinzu, und nummerieren Sie sie eindeutig

Ich möchte einer vorhandenen alten 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 die automatische Generierung 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 1 bis 1000. Wie mache ich das?

117
Adhip Gupta

Dies hängt von der Datenbank ab, kann jedoch für SQL Server wie folgt erreicht werden:

alter table Example
add NewColumn int identity(1,1)
206
Simon Johnson

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:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

Ich bin mir nicht sicher, ob dies rückwirkend auf die Werte zutrifft. Wenn dies nicht der Fall ist, sollten Sie in der Lage sein, Ihre Werte mit einer gespeicherten Prozedur oder in einem einfachen Programm zu durchlaufen (solange niemand in die Datenbank schreibt) und die Funktion LAST_INSERT_ID() auf zu setzen Generieren Sie den ID-Wert.

20
Tom Martin

für Oracle könnte man so etwas wie unten machen

alter table mytable add (myfield integer);

update mytable set myfield = rownum;
10
Roy Tang

Und das Postgres-Äquivalent (zweite Zeile ist nur obligatorisch, wenn "id" ein Schlüssel sein soll):

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);
8
Flavien Volken

Nur mit einem 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 zur ALTER TABLE-Syntax

4
Ilya Kochetov

versuchen Sie dies für den Datentyp UNIQUEIDENTIFIER in SQL Server

Alter table table_name
add ID UNIQUEIDENTIFIER not null unique default(newid())

Wenn Sie einen Primärschlüssel aus dieser Spalte erstellen möchten, verwenden Sie diese Option

ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);
2
Snziv Gupta

Wenn Sie nicht möchten, dass Ihre neue Spalte vom Typ IDENTITY ist (automatische Inkrementierung), oder wenn Sie genau wissen möchten, in welcher Reihenfolge Ihre Zeilen nummeriert sind, können Sie eine Spalte vom Typ _INT NULL_ und füllen Sie es dann wie folgt. In meinem Beispiel heißt die neue Spalte MyNewColumn und die vorhandene Primärschlüsselspalte für die Tabelle heißt MyPrimaryKey.

_UPDATE MyTable
SET MyTable.MyNewColumn = AutoTable.AutoNum
FROM
(
    SELECT MyPrimaryKey, 
    ROW_NUMBER() OVER (ORDER BY SomeColumn, SomeOtherColumn) AS AutoNum
    FROM MyTable 
) AutoTable
WHERE MyTable.MyPrimaryKey = AutoTable.MyPrimaryKey  
_

Dies funktioniert in SQL Server 2005 und höher, d. H. Versionen, die ROW_NUMBER() unterstützen.

0
Jinlye

Hängt von der Datenbank ab, da jede Datenbank eine andere Methode zum Hinzufügen von Folgenummern hat. 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 höchsten Zahl beginnt. Sobald die Daten festgelegt wurden, stellen Sie die Primärschlüssel richtig ein.

0
Joshua