如何使用SQL重命名数据库表中的列?


113

如果我想使用SQL在SQL数据库中简单地重命名一列(而不更改其类型或约束,仅更改其名称),该怎么做?还是不可能?

这适用于任何声称支持SQL的数据库,我只是在寻找一个特定于SQL的查询,无论实际的数据库实现如何,该查询都将起作用。


2
其次,这不是一个“ SQL”问题,而是(也许)一个“ SQLServer”问题。
东尼·安德鲁斯

1
任何使用SQL的数据库系统。Oracle,MySQL等...我正在寻找与数据库无关的答案。
MetroidFan2002

Answers:


97

在PostgreSQL(以及许多其他RDBMS)上,可以使用常规ALTER TABLE语句来做到这一点:

=> 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
MySQL不支持此功能,对吗?
ustun 2011年

5
不,它在MySQL中不受支持
rick

4
Microsoft SQL Server也不支持此功能。而是sp_rename按照Galwegian的答案使用:stackoverflow.com/a/174586/834431
Chris

我相信MySQL 8.0现在支持此语法
Dan

118

专门用于SQL Server,使用 sp_rename

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

似乎特定于Microsoft,原始查询中没有任何内容指示Microsoft DBMS。
bortzmeyer

1
是的,我正在寻找的答案是“标准” SQL,而不依赖于任何特定的实现。但是,对于使用Microsoft系统的任何人来说,这都是一个很好的答案。
MetroidFan2002


21

不幸的是,对于独立于数据库的解决方案,您将需要了解有关该列的所有信息。如果在其他表中将其用作外键,则也需要对其进行修改。

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;

对于最简单的情况(无约束,触发器,索引或键),将采用上述3行。对于任何更复杂的东西,当您填写缺少的部分时,它可能会变得非常混乱。

但是,如上所述,如果您知道需要提前修改哪个数据库,则有一些更简单的数据库特定方法。


即使不是确切的
询问者

在评论中,OP实际上澄清了这正是他所寻找的。
MagneTism

20

我认为这是更改列名的最简单方法。

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'

这在SQL Server上对我有用。我不确定是否可以在其他DBMS上使用
Nic

9

在Informix中,可以使用:

RENAME COLUMN TableName.OldName TO NewName;

这是在SQL标准解决该问题之前实施的-如果在SQL标准中已解决该问题。我的SQL 9075:2003标准副本没有将其显示为标准(此外,RENAME不是关键字之一)。我不知道它实际上是否在SQL 9075:2008中。


2
在SQL 2008 Draft中也没有RENAME。
Nicolas Buduroi,2009年

不作为-使用TO。 RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…– hitzi 2014
41

6

在SQL Server中,您可以使用

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

要么

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

6

您可以使用以下命令来重命名SQL Server中任何表的列:

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

3

ALTER TABLE是标准SQL。但是它并没有在许多数据库系统中完全实现。


我接受bortz对您的回答,因为他给出了详细的解释。不过,我支持你。
MetroidFan2002

@ MetroidFan2002-我只添加了我的答案,以承认“ ALTER TABLE”不仅是PostgreSQL,而且很常见。
Paul Tomblin

2

标准是ALTER TABLE,但不一定会受到您可能会遇到的每个DBMS的支持,因此,如果您正在寻找一种包罗万象的语法,那么可能会很不幸。


0

替代 SQL,您可以在Microsoft SQL Server Management Studio中做到这一点,从表设计面板。

第一路

缓慢双击该列。列名将变为可编辑的文本框。

第二路

SqlManagement Studio >>数据库>>表>>特定表>>列文件夹>>右键单击列>> Reman

第三路

表格>>右键单击>>设计

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.