2008-10-06 8 views
87

Wenn ich einfach eine Spalte umbenennen (nicht den Typ oder die Einschränkungen ändern, nur den Namen) in einer SQL-Datenbank mit SQL, wie mache ich das? Oder ist das nicht möglich?Wie benenne ich eine Spalte in einer Datenbanktabelle mit SQL?

Dies ist für jede Datenbank behauptet, SQL zu unterstützen, ich bin einfach auf der Suche nach einer SQL-spezifischen Abfrage, die unabhängig von der tatsächlichen Datenbankimplementierung funktioniert.

+1

Welches Datenbanksystem? – skaffman

+1

Skaffman absenden, dies ist keine "SQL" -Frage, es ist (vielleicht) eine "SQLServer" -Frage. –

+1

Jedes Datenbanksystem, das vorgibt, SQL zu verwenden. Oracle, MySQL, etc ... Ich suche eine datenbankunabhängige Antwort. – MetroidFan2002

Antwort

78

Auf PostgreSQL (und viele andere RDBMS), können Sie es mit regelmäßigen ALTER TABLE Aussage:

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

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

essais=> SELECT * FROM Test1; 
id | baz | bar 
----+-----+----- 
    2 | 1 | 2 
+8

Dies wird nicht in MySQL unterstützt, oder? – ustun

+3

Nein, es wird nicht in MySQL unterstützt – rick

+4

Dies wird auch nicht in Microsoft SQL Server unterstützt. Verwenden Sie stattdessen 'sp_rename' gemäß der Antwort von Galwegian: http://stackoverflow.com/a/174586/834431 – Chris

96

Speziell für SQL Server verwenden sp_rename

USE AdventureWorks; 
GO 
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN'; 
GO 
+0

Es scheint Microsoft-spezifisch und nichts in der ursprünglichen Abfrage zeigte ein Microsoft DBMS an. – bortzmeyer

+1

Ja, die Antwort, nach der ich gesucht habe, ist "Standard" SQL und nicht von einer bestimmten Implementierung abhängig. Es ist jedoch eine gute Antwort für jeden, der das System von Microsoft verwendet. – MetroidFan2002

+0

Ich habe die Antwort bearbeitet, um dies zu berücksichtigen –

3

ALTER TABLE ist Standard-SQL. Aber es ist nicht vollständig in vielen Datenbanksystemen implementiert.

+0

Ich habe bortz 'Antwort über Ihre angenommen, weil er eine detaillierte Erklärung gegeben hat. Trotzdem habe ich Sie neu eingestellt. – MetroidFan2002

+0

@ MetroidFan2002 - Ich habe nur meine Antwort hinzugefügt, um zu bestätigen, dass "ALTER TABLE" nicht nur PostgreSQL ist, es ist ziemlich üblich. –

9

In Informix können Sie verwenden:

RENAME COLUMN TableName.OldName TO NewName; 

Diese implementiert wurde, bevor der SQL-Standard das Problem angesprochen - wenn es in dem SQL-Standard gerichtet. Meine Kopie des Standards SQL 9075: 2003 zeigt es nicht als Standard (unter anderem ist RENAME nicht eines der Schlüsselwörter). Ich weiß nicht, ob es tatsächlich in SQL 9075: 2008 ist.

+2

Kein RENAME in SQL 2008 Entwurf auch. –

+0

Nicht AS - TO verwenden. 'COLUMN TableName.OldName TO NewName RENAME;' http://www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/com.ibm.sqls.doc/ids_sqs_0939.htm – hitzi

+0

Dank - fest ! –

2

Der Standard wäre ALTER TABLE, aber das wird nicht unbedingt von jedem DBMS unterstützt, das Sie wahrscheinlich finden werden. Wenn Sie also nach einer umfassenden Syntax suchen, können Sie Pech haben.

14

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 sie 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 die einfachsten Fälle (keine Einschränkungen, Trigger, Indizes oder Schlüssel), dauert es die obigen 3 Zeilen. Für etwas komplizierter kann es sehr chaotisch 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.

+0

Direkt beantwortet die Frage, auch wenn es nicht genau das ist, was der Fragesteller gesucht hat ... – Lambart

-1

Alternativ zu SQL können Sie dies in Microsoft SQL Server Management Studio aus der Tabelle Design Panel tun.

Erste Way

Langsam Doppelklick auf die Spalte. Der Spaltenname wird zu einem bearbeitbaren Textfeld.

Second Way

SqlManagement Studio >> DataBases >> Tabellen >> specificTable >> Spalte Ordner >> Rechts auf Spalte klicken >> Reman

Dritten Weg

Tabelle >> Rechtsklick >> Design

25

In MySQL ist 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 beibehalten können. Sie müssen den Datentyp und die Einschränkungen nach dem neuen Namen der Spalte erneut eingeben.

+0

ist es in mySQL-Datenbank getestet –

15

Ich denke, das ist der einfachste Weg, Spaltennamen zu ändern.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME' 
+0

das funktionierte für mich auf SQL Server. Ich bin nicht sicher, ob dies auf anderen DBMS funktioniert – Nic

4

in SQL Server können Sie

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

oder

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

Sie können den folgenden Befehl verwenden Verwenden Sie die Spalte einer Tabelle in SQL Server umbenennen:

exec sp_rename 'TableName.OldColumnName', 'New colunmName' 
Verwandte Themen