Wie benenne ich eine Spalte in einer Datenbanktabelle mit SQL um?

112

Wie kann ich eine Spalte in einer SQL-Datenbank mithilfe von SQL einfach umbenennen (nicht ihren Typ oder ihre Einschränkungen ändern, sondern nur ihren Namen)? Oder ist das nicht möglich?

Dies gilt für jede Datenbank, die behauptet, SQL zu unterstützen. Ich suche einfach nach einer SQL-spezifischen Abfrage, die unabhängig von der tatsächlichen Datenbankimplementierung funktioniert.

MetroidFan2002
quelle
2
Dies ist keine "SQL" -Frage, sondern (möglicherweise) eine "SQLServer" -Frage.
Tony Andrews
1
Jedes Datenbanksystem, das vorgibt, SQL zu verwenden. Oracle, MySQL usw. Ich suche nach einer datenbankunabhängigen Antwort.
MetroidFan2002

Antworten:

96

Unter PostgreSQL (und vielen anderen RDBMS) können Sie dies mit einer regulären ALTER TABLEAnweisung tun :

=> SELECT * FROM Test1;
 id | foo | bar 
----+-----+-----
  2 |   1 |   2

=> ALTER TABLE Test1 RENAME COLUMN foo TO baz;
ALTER TABLE

=> SELECT * FROM Test1;
 id | baz | bar 
----+-----+-----
  2 |   1 |   2
bortzmeyer
quelle
10
Dies wird in MySQL nicht unterstützt, oder?
Ustun
5
Nein, es wird in MySQL nicht unterstützt
Rick
4
Dies wird auch in Microsoft SQL Server nicht unterstützt. Verwenden Sie stattdessen sp_renamegemäß der Antwort von Galwegian
Chris
Ich glaube, MySQL 8.0 unterstützt diese Syntax jetzt
Dan
118

Verwenden Sie speziell für SQL Server sp_rename

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
Galwegisch
quelle
Es scheint Microsoft-spezifisch zu sein und nichts in der ursprünglichen Abfrage deutete auf ein Microsoft DBMS hin.
Bortzmeyer
1
Ja, die Antwort, nach der ich gesucht habe, ist "Standard" SQL und hängt nicht von einer bestimmten Implementierung ab. Es ist jedoch eine gute Antwort für alle, die das Microsoft-System verwenden.
MetroidFan2002
35

In MySQL lautet die Syntax ALTER TABLE ... CHANGE:

ALTER TABLE <table_name> CHANGE <column_name> <new_column_name> <data_type> ...

Beachten Sie, dass Sie den Typ und die Einschränkungen nicht einfach umbenennen und unverändert lassen können. Sie müssen den Datentyp und die Einschränkungen nach dem neuen Namen der Spalte erneut eingeben.

Jaspher Chloe
quelle
Es ist in der MySQL-Datenbank getestet
Jaspher Chloe
2
Wir können die Spalte einfach umbenennen, ohne den Typ / die Einschränkung mit der RENAMESyntax zu beeinflussen. Benennen Sie eine Spalte in MySQL
Lukasz Szozda
21

Leider müssen Sie für eine datenbankunabhängige Lösung alles über die Spalte wissen. Wenn es in anderen Tabellen als Fremdschlüssel verwendet wird, müssen diese ebenfalls geändert werden.

ALTER TABLE MyTable ADD MyNewColumn OLD_COLUMN_TYPE;
UPDATE MyTable SET MyNewColumn = MyOldColumn;
-- add all necessary triggers and constraints to the new column...
-- update all foreign key usages to point to the new column...
ALTER TABLE MyTable DROP COLUMN MyOldColumn;

Für den einfachsten Fall (keine Einschränkungen, Trigger, Indizes oder Schlüssel) werden die obigen 3 Zeilen verwendet. Bei komplizierteren Dingen kann es sehr unordentlich werden, wenn Sie die fehlenden Teile ausfüllen.

Wie oben erwähnt, gibt es jedoch einfachere datenbankspezifische Methoden, wenn Sie wissen, welche Datenbank Sie im Voraus ändern müssen.

Schattenmann
quelle
Beantwortet direkt die Frage, auch wenn es nicht genau das ist, wonach der Fragesteller gesucht hat ...
Lambart
In dem Kommentar stellte OP tatsächlich klar, dass dies genau das ist, wonach er suchte.
MagneTism
20

Ich denke, dies ist der einfachste Weg, um den Spaltennamen zu ändern.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'
Kunal Relan
quelle
Dies funktionierte bei mir unter SQL Server. Ich bin nicht sicher, ob dies auf anderen DBMS funktioniert
Nic
9

In Informix können Sie Folgendes verwenden:

RENAME COLUMN TableName.OldName TO NewName;

Dies wurde implementiert, bevor der SQL-Standard das Problem behoben hat - sofern dies im SQL-Standard behoben ist. Meine Kopie des SQL 9075: 2003-Standards zeigt ihn nicht als Standard an (unter anderem ist RENAME nicht eines der Schlüsselwörter). Ich weiß nicht, ob es tatsächlich in SQL 9075: 2008 ist.

Jonathan Leffler
quelle
2
Kein RENAME auch in SQL 2008 Draft.
Nicolas Buduroi
Nicht AS - benutze TO. RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…
hitzi
6

In SQL Server können Sie verwenden

exec sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'

oder

sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'
Bimzee
quelle
6

Mit dem folgenden Befehl können Sie die Spalte einer beliebigen Tabelle in SQL Server umbenennen:

exec sp_rename 'TableName.OldColumnName', 'New colunmName'
Prabhat Kumar Yadav
quelle
3

ALTER TABLE ist Standard-SQL. In vielen Datenbanksystemen ist es jedoch nicht vollständig implementiert.

Paul Tomblin
quelle
Ich habe Bortz 'Antwort über deine akzeptiert, weil er eine detaillierte Erklärung gegeben hat. Trotzdem habe ich dich positiv bewertet.
MetroidFan2002
@ MetroidFan2002 - Ich habe nur meine Antwort hinzugefügt, um zu bestätigen, dass "ALTER TABLE" nicht nur PostgreSQL ist, sondern ziemlich häufig.
Paul Tomblin
2

Der Standard wäre ALTER TABLE, aber das wird nicht unbedingt von jedem DBMS unterstützt, auf das Sie wahrscheinlich stoßen. Wenn Sie also nach einer umfassenden Syntax suchen, haben Sie möglicherweise kein Glück.

rauben
quelle
0

Alternativ dazu SQLkönnen Sie dies in Microsoft SQL Server Management Studio über die Tabelle Design Panel tun.

Erster Weg

Doppelklicken Sie langsam auf die Spalte. Der Spaltenname wird zu einem bearbeitbaren Textfeld.

Zweiter Weg

SqlManagement Studio >> Datenbanken >> Tabellen >> Spezifische Tabelle >> Spaltenordner >> Klicken Sie mit der rechten Maustaste auf Spalte >> Reman

Dritter Weg

Tabelle >> Rechtsklick >> Design

Uzair Xlade
quelle