Come si rinomina una colonna in una tabella di database utilizzando SQL?


113

Se desidero semplicemente rinominare una colonna (senza modificarne il tipo o i vincoli, ma solo il nome) in un database SQL utilizzando SQL, come posso farlo? O non è possibile?

Questo è per qualsiasi database che dichiara di supportare SQL, sto semplicemente cercando una query specifica per SQL che funzioni indipendentemente dall'attuale implementazione del database.


2
Secondo skaffman, questa non è una domanda "SQL", è (forse) una domanda "SQLServer".
Tony Andrews

1
Qualsiasi sistema di database che pretende di utilizzare SQL. Oracle, MySQL, ecc ... Sto cercando una risposta indipendente dal database.
MetroidFan2002

Risposte:


97

Su PostgreSQL (e molti altri RDBMS), puoi farlo con una ALTER TABLEdichiarazione regolare :

=> 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

10
Questo non è supportato in MySQL, vero?
ustun

5
No, non è supportato in MySQL
rick

4
Anche questo non è supportato in Microsoft SQL Server. Usa invece sp_renamecome da risposta di Galwegian: stackoverflow.com/a/174586/834431
Chris

Credo che MySQL 8.0 supporti questa sintassi ora
Dan

118

In particolare per SQL Server, utilizzare sp_rename

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

Sembra specifico di Microsoft e nulla nella query originale indicava un DBMS Microsoft.
bortzmeyer

1
Sì, la risposta che stavo cercando è SQL "standard" e non dipende da alcuna implementazione particolare. Tuttavia, è una buona risposta per chiunque utilizzi il sistema Microsoft.
MetroidFan2002

35

In MySQL, la sintassi è ALTER TABLE ... CHANGE:

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

Nota che non puoi semplicemente rinominare e lasciare il tipo e i vincoli così come sono; è necessario ridigitare il tipo di dati e i vincoli dopo il nuovo nome della colonna.


è testato nel database mySQL
jaspher chloe

2
Possiamo semplicemente rinominare la colonna senza influenzare il tipo / vincolo con la RENAMEsintassi. Rinomina una colonna in MySQL
Lukasz Szozda

21

Sfortunatamente, per una soluzione indipendente dal database, dovrai sapere tutto sulla colonna. Se viene utilizzato in altre tabelle come chiave esterna, sarà necessario modificarle.

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;

Per i casi più semplici (senza vincoli, trigger, indici o chiavi), saranno necessarie le 3 righe precedenti. Per qualcosa di più complicato può diventare molto disordinato mentre si riempiono le parti mancanti.

Tuttavia, come accennato in precedenza, esistono metodi specifici per database più semplici se si sa quale database è necessario modificare in anticipo.


Risponde direttamente alla domanda, anche se non è esattamente quello che il richiedente stava cercando ...
Lambart

Nel commento, OP ha effettivamente chiarito che questo è esattamente quello che stava cercando.
MagneTism

20

Penso che questo sia il modo più semplice per cambiare il nome della colonna.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'

questo ha funzionato per me su SQL Server. Non sono sicuro che funzioni su altri DBMS
Nic

9

In Informix è possibile utilizzare:

RENAME COLUMN TableName.OldName TO NewName;

Questo è stato implementato prima che lo standard SQL risolvesse il problema, se è affrontato nello standard SQL. La mia copia dello standard SQL 9075: 2003 non lo mostra come standard (tra le altre cose, RENAME non è una delle parole chiave). Non so se sia effettivamente in SQL 9075: 2008.


2
Niente RENAME anche in SQL 2008 Draft.
Nicolas Buduroi

Non AS - usa TO. RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…
hitzi

6

In sql server puoi usare

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

o

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

6

È possibile utilizzare il comando seguente per rinominare la colonna di qualsiasi tabella in SQL Server:

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

3

ALTER TABLE è SQL standard. Ma non è completamente implementato in molti sistemi di database.


Ho accettato la risposta di Bortz rispetto alla tua perché mi ha fornito una spiegazione dettagliata. Tuttavia, ti ho votato positivamente.
MetroidFan2002

@ MetroidFan2002 - Ho aggiunto la mia risposta solo per riconoscere che "ALTER TABLE" non è solo PostgreSQL, è piuttosto comune.
Paul Tomblin

2

Lo standard sarebbe ALTER TABLE, ma non è necessariamente supportato da ogni DBMS che potresti incontrare, quindi se stai cercando una sintassi onnicomprensiva, potresti essere sfortunato.


0

In alternativa SQL, puoi farlo in Microsoft SQL Server Management Studio, dalla tabella Design Panel.

Primo modo

Fare doppio clic lentamente sulla colonna. Il nome della colonna diventerà una casella di testo modificabile.

Secondo modo

SqlManagement Studio >> DataBase >> tabelle >> specificTable >> Cartella colonne >> Fare clic con il tasto destro sulla colonna >> Reman

Terza via

Tabella >> >> RightClick design

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.