Comment renommer une colonne dans une table de base de données à l'aide de SQL?

113

Si je souhaite simplement renommer une colonne (ne pas changer son type ou ses contraintes, juste son nom) dans une base de données SQL en utilisant SQL, comment faire? Ou n'est-ce pas possible?

C'est pour toute base de données prétendant prendre en charge SQL, je recherche simplement une requête spécifique à SQL qui fonctionnera indépendamment de l'implémentation réelle de la base de données.

MetroidFan2002
la source
2
Second skaffman, ce n'est pas une question "SQL", c'est (peut-être) une question "SQLServer".
Tony Andrews
1
Tout système de base de données qui prétend utiliser SQL. Oracle, MySQL, etc ... Je recherche une réponse indépendante de la base de données.
MetroidFan2002

Réponses:

97

Sur PostgreSQL (et de nombreux autres SGBDR), vous pouvez le faire avec une ALTER TABLEinstruction régulière :

=> 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
la source
10
Ce n'est pas pris en charge dans MySQL, n'est-ce pas?
ustun
5
Non, ce n'est pas pris en charge dans MySQL
rick
4
Cela n'est pas non plus pris en charge dans Microsoft SQL Server. Utilisez plutôt sp_renameselon la réponse de Galwegian: stackoverflow.com/a/174586/834431
Chris
Je crois que MySQL 8.0 prend en charge cette syntaxe maintenant
Dan
118

Spécifiquement pour SQL Server, utilisez sp_rename

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
Galvégien
la source
Il semble spécifique à Microsoft et rien dans la requête d'origine n'indiquait un SGBD Microsoft.
bortzmeyer
1
Oui, la réponse que je recherchais est SQL "standard", et ne dépend d'aucune implémentation particulière. Cependant, c'est une bonne réponse pour quiconque utilise le système de Microsoft.
MetroidFan2002
35

Dans MySQL, la syntaxe est ALTER TABLE ... CHANGE:

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

Notez que vous ne pouvez pas simplement renommer et laisser le type et les contraintes tels quels; vous devez retaper le type de données et les contraintes après le nouveau nom de la colonne.

jaspher chloé
la source
il est testé dans la base de données mySQL
jaspher chloe
2
Nous pouvons simplement renommer la colonne sans affecter le type / la contrainte avec la RENAMEsyntaxe. Renommer une colonne dans MySQL
Lukasz Szozda
21

Malheureusement, pour une solution indépendante de la base de données, vous devrez tout savoir sur la colonne. S'il est utilisé dans d'autres tables comme clé étrangère, ils devront également être modifiés.

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;

Pour les cas les plus simples (pas de contraintes, déclencheurs, index ou clés), il faudra les 3 lignes ci-dessus. Pour tout ce qui est plus compliqué, cela peut devenir très compliqué lorsque vous remplissez les parties manquantes.

Cependant, comme mentionné ci-dessus, il existe des méthodes spécifiques aux bases de données plus simples si vous savez quelle base de données vous devez modifier à l'avance.

Homme de l'ombre
la source
Répond directement à la question, même si ce n'est pas exactement ce que le demandeur recherchait ...
Lambart
Dans le commentaire, OP a en fait précisé que c'est exactement ce qu'il recherchait.
MagneTism
20

Je pense que c'est le moyen le plus simple de changer le nom de la colonne.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'
Kunal Relan
la source
cela a fonctionné pour moi sur SQL Server. Je ne suis pas sûr que cela fonctionne sur d'autres SGBD
Nic
9

Dans Informix, vous pouvez utiliser:

RENAME COLUMN TableName.OldName TO NewName;

Cela a été implémenté avant que la norme SQL ne règle le problème - si elle est traitée dans la norme SQL. Ma copie de la norme SQL 9075: 2003 ne l’indique pas comme étant standard (entre autres, RENAME n’est pas l’un des mots-clés). Je ne sais pas si c'est réellement dans SQL 9075: 2008.

Jonathan Leffler
la source
2
Pas de RENAME dans SQL 2008 Draft également.
Nicolas Buduroi
Pas AS - utilisez TO. RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…
hitzi
6

Dans le serveur SQL, vous pouvez utiliser

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

ou

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

Vous pouvez utiliser la commande suivante pour renommer la colonne de n'importe quelle table dans SQL Server:

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

ALTER TABLE est du SQL standard. Mais ce n'est pas complètement implémenté dans de nombreux systèmes de bases de données.

Paul Tomblin
la source
J'ai accepté la réponse de Bortz plutôt que la vôtre parce qu'il a donné une explication détaillée. Néanmoins, je vous ai voté pour.
MetroidFan2002
@ MetroidFan2002 - J'ai seulement ajouté ma réponse pour reconnaître que "ALTER TABLE" n'est pas seulement PostgreSQL, c'est assez courant.
Paul Tomblin
2

La norme serait ALTER TABLE, mais ce n'est pas nécessairement pris en charge par tous les SGBD que vous êtes susceptible de rencontrer, donc si vous recherchez une syntaxe globale, vous n'aurez peut-être pas de chance.

Rob
la source
0

Vous SQLpouvez également le faire dans Microsoft SQL Server Management Studio, à partir du panneau de conception de table.

Première manière

Double-cliquez lentement sur la colonne. Le nom de la colonne deviendra une zone de texte modifiable.

Deuxième voie

SqlManagement Studio >> DataBases >> tableaux >> specificTable >> Column Folder >> Clic droit sur la colonne >> Reman

Troisième voie

Tableau >> Clic droit >> Conception

Uzair Xlade
la source