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

Met*_*002 109 sql database sql-server rename

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

这适用于任何声称支持SQL的数据库,我只是在寻找一个特定于SQL的查询,无论实际的数据库实现如何都可以使用.

Gal*_*ian 114

特别是对于SQL Server,请使用 sp_rename

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是 Microsoft 特有的,原始查询中没有任何内容表明 Microsoft DBMS。 (3认同)
  • 请注意:不要使用类似“EXEC sp_rename '[Sales].[SalesTerritory].[TerritoryID]', '[TerrID]', 'COLUMN';”之类的命令,因为它会将列重命名为“[TerrID” ]`,这会破坏很多东西......根据这里的经验谈论...... (3认同)
  • 是的,我正在寻找的答案是“标准”SQL,而不依赖于任何特定的实现。然而,对于任何使用微软系统的人来说,这是一个很好的答案。 (2认同)

bor*_*yer 94

在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
Run Code Online (Sandbox Code Playgroud)

  • 这在MySQL中不受支持,是吗? (9认同)
  • 不,它在MySQL中不受支持 (4认同)
  • Microsoft SQL Server也不支持此功能.而是根据Galwegian的回答使用`sp_rename`:http://stackoverflow.com/a/174586/834431 (4认同)

jas*_*loe 34

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

ALTER TABLE <table_name> CHANGE <column_name> <new_column_name> <data_type> ...
Run Code Online (Sandbox Code Playgroud)

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

  • 我们可以使用`RENAME`语法重命名列而不影响类型/约束.[重命名MySQL中的专栏](/sf/ask/2120361631/#49925232) (2认同)

Sha*_*Man 20

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

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;
Run Code Online (Sandbox Code Playgroud)

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

但是,如上所述,如果您知道需要提前修改哪个数据库,则可以使用更简单的数据库特定方法.


小智 20

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

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 9

在Informix中,您可以使用:

RENAME COLUMN TableName.OldName TO NewName;
Run Code Online (Sandbox Code Playgroud)

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

  • SQL 2008草稿中也没有RENAME. (2认同)

Bim*_*zee 6

在SQL Server中,您可以使用

exec sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'
Run Code Online (Sandbox Code Playgroud)

要么

sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'
Run Code Online (Sandbox Code Playgroud)


小智 6

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

exec sp_rename 'TableName.OldColumnName', 'New colunmName'
Run Code Online (Sandbox Code Playgroud)