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

Posted

技术标签:

【中文标题】如何使用 SQL 重命名数据库表中的列?【英文标题】:How do I rename a column in a database table using SQL? 【发布时间】:2010-09-15 12:46:16 【问题描述】:

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

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

【问题讨论】:

第二个 skaffman,这不是一个“SQL”问题,它(可能)是一个“SQLServer”问题。 声称使用 SQL 的任何数据库系统。 Oracle、mysql 等...我正在寻找独立于数据库的答案。 【参考方案1】:

专门针对 SQL Server,使用 sp_rename

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

【讨论】:

似乎是 Microsoft 特定的,原始查询中没有任何内容表明 Microsoft DBMS。 是的,我正在寻找的答案是“标准”SQL,并且不依赖于任何特定的实现。但是,对于任何使用微软系统的人来说,这都是一个很好的答案。 请注意:不要使用EXEC sp_rename '[Sales].[SalesTerritory].[TerritoryID]', '[TerrID]', 'COLUMN'; 之类的东西,因为它会将列重命名为[TerrID],这会破坏很多东西......从这里的经验谈起...... .【参考方案2】:

在 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

【讨论】:

MySQL 不支持这个,是吗? 不,MySQL 不支持 Microsoft SQL Server 也不支持此功能。而是按照 Galwegian 的回答使用 sp_rename:***.com/a/174586/834431 我相信 MySQL 8.0 现在支持这种语法【参考方案3】:

在 MySQL 中,语法是ALTER TABLE ... CHANGE:

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

请注意,您不能只重命名并保持类型和约束不变;您必须在列的新名称后重新键入数据类型和约束。

【讨论】:

在mySQL数据库中测试过 我们可以使用RENAME 语法重命名列而不影响类型/约束。 Rename a column in MySQL【参考方案4】:

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

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实际上澄清说这正是他想要的。【参考方案5】:

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

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'

【讨论】:

这在 SQL Server 上对我有用。我不确定这是否适用于其他 DBMS【参考方案6】:

在 Informix 中,您可以使用:

RENAME COLUMN TableName.OldName TO NewName;

这是在 SQL 标准解决该问题之前实施的 - 如果 SQL 标准中解决了该问题。我的 SQL 9075:2003 标准副本并未将其显示为标准(除其他外,RENAME 不是关键字之一)。我不知道它是否真的在 SQL 9075:2008 中。

【讨论】:

SQL 2008 草案中也没有重命名。 不是按原样 - 使用 TO。 RENAME COLUMN TableName.OldName TO NewName;www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…【参考方案7】:

在sql server中可以使用

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

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

【讨论】:

【参考方案8】:

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

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

【讨论】:

【参考方案9】:

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

【讨论】:

我接受了 bortz 的回答而不是你的回答,因为他给出了详细的解释。尽管如此,我还是支持你。 @MetroidFan2002 - 我只是添加了我的答案来承认“ALTER TABLE”不仅仅是 PostgreSQL,它很常见。【参考方案10】:

标准是 ALTER TABLE,但您可能遇到的每个 DBMS 不一定都支持它,所以如果您正在寻找一种包罗万象的语法,那么您可能会不走运。

【讨论】:

【参考方案11】:

除了SQL,您还可以在 Microsoft SQL Server Management Studio 中的表设计面板中执行此操作。

第一道

慢速双击列。列名将成为可编辑的文本框。

第二种方式

SqlManagement Studio>>DataBases>>tables>>specificTable>>Column 文件夹>>右键单击列>>Reman

第三条路

表格>>右键>>设计

【讨论】:

以上是关于如何使用 SQL 重命名数据库表中的列?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用列表重命名熊猫中的列

如何使用字典键和值重命名 pandas DataFrame 中的列?

如何重命名SQL Server中计算列中引用的列?

使用 SQL 重命名 MS Access 中的列

是否有任何已发布的编码风格指南用于重命名 SQL 视图中的列?

如何重命名 maria DB 中的列名