如果我希望简单地使用SQL在SQL数据库中重命名列(不改变其类型或约束,只是其名称),我该怎么做?还是不可能?
这适用于任何声称支持SQL的数据库,我只是在寻找一个特定于SQL的查询,无论实际的数据库实现如何都可以使用.
特别是对于SQL Server,请使用 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
在MySQL中,语法是ALTER TABLE ... CHANGE
:
ALTER TABLECHANGE ...
请注意,您不能只是重命名并保留类型和约束; 您必须在列的新名称后重新键入数据类型和约束.
不幸的是,对于独立于数据库的解决方案,您需要了解有关该列的所有信息.如果它在其他表中用作外键,则还需要修改它们.
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行.对于任何更复杂的东西,当你填写缺少的部分时,它会变得非常混乱.
但是,如上所述,如果您知道需要提前修改哪个数据库,则可以使用更简单的数据库特定方法.
我认为这是更改列名的最简单方法.
SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'
在Informix中,您可以使用:
RENAME COLUMN TableName.OldName TO NewName;
这是在SQL标准解决问题之前实现的 - 如果它在SQL标准中得到解决.我的SQL 9075:2003标准副本没有将其显示为标准(除其他外,RENAME不是关键字之一).我不知道它是否实际上在SQL 9075:2008中.
在SQL Server中,您可以使用
exec sp_rename '',' ','COLUMN'
要么
sp_rename '',' ','COLUMN'
您可以使用以下命令来重命名SQL Server中任何表的列:
exec sp_rename 'TableName.OldColumnName', 'New colunmName'