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

如果我希望在 SQL 数据库中使用 SQL 简单地重命名一个列(不改变其类型或约束,只改变其名称) ,我该如何做呢?还是不可能?

对于任何声称支持 SQL 的数据库,我只是在寻找一个特定于 SQL 的查询,不管实际的数据库实现如何,它都可以工作。

595487 次浏览

对于 SQLServer,使用 sp_rename

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

在 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

ALTERTABLE 是标准的 SQL,但是在许多数据库系统中并没有完全实现。

在 Informix 中,您可以使用:

RENAME COLUMN TableName.OldName TO NewName;

这是在 SQL 标准解决这个问题之前实现的——如果 SQL 标准解决了这个问题的话。我的 SQL 9075:2003标准副本没有显示它是标准的(RENAME 不是关键字之一)。我不知道它实际上是否在 SQL 9075:2008中。

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

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

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行。对于任何更复杂的东西,它可以变得非常混乱,因为你填补了缺失的部分。

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

除了 SQL之外,你也可以在 Microsoft SQL Server 管理工作室的“设计面板”中完成这项工作。

第一条路

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

第二条路

SqlManagementStudio > > DataBases > > tables > > specitTable > > Column 文件夹 > > 右击栏 > > 雷曼

第三条路

表 > > 右击 > > 设计

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

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

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

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

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'

在 sql 服务器中可以使用

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

或者

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

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

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

要重命名,必须更改列

例如:

假设

* 注册是表名

NewRefereeName 是要更改为 RefereeName 的列名 因此,我的 SQL 查询将是 *

(100)字符集 utf8mb4校对 utf8mb4 _ general _ ci NOT NULL;

Exec sp _ rename‘ Tablename. OldColumnName’,‘ NewColumnName’,‘ Column’;