重命名SQL Server 2008列

我正在使用SQL Server 2008和navicat。 我需要使用SQL重命名表中的列。

ALTER TABLE table_name RENAME COLUMN old_name to new_name; 

这个声明不起作用。

使用sp_rename

 EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN' 

请参阅: SQL SERVER – 如何重命名列名或表名

文档: sp_rename (Transact-SQL)

对于你的情况,这将是:

 EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN' 

请记住使用单引号来包含您的值。

除了SQL ,您还可以在Microsoft SQL Server Management Studio中执行此操作。 以下是使用GUI的一些快速方法:

第一条路

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


第二条路

右键单击列并从上下文菜单中select重命名。

例如:

重命名列名称


第三条道路

这种方式更适合于需要一次重命名多个列的情况。

  1. 右键单击包含需要重命名的列的表。
  2. 点击devise
  3. 在表格devise面板中,单击并编辑要更改的列名的文本框。

例如: MSSMS表设计实例

注:我知道OP特别要求SQL解决scheme,认为这可能会帮助其他人:)

尝试:

 EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN' 

这是一个很好的build议,使用已经内置的function,但另一种方法是:

  1. 创build一个具有相同数据types和新名称的新列。
  2. 运行UPDATE / INSERT语句将所有数据复制到新列中。
  3. 放下旧的专栏。

使用sp_rename的好处是它处理所有与之相关的关系。

从文档 :

只要PRIMARY KEY或UNIQUE约束被重命名,sp_rename就会自动重命名关联的索引。 如果重命名的索引绑定到PRIMARY KEY约束,则PRIMARY KEY约束也会由sp_rename自动重命名。 sp_rename可用于重命名主要和辅助XML索引。

你也应该指定表的模式,否则你可能会得到这个错误:

消息15248,级别11,状态1,过程sp_rename,行238参数@objname不明确或声明的@objtype(COLUMN)错误。

如果它是一个部署脚本,我也build议增加一些额外的安全性。

  if exists (select 1 from sys.columns where name = 'OldColumnName' and object_name(object_id) = 'TableName') AND not exists (select 1 from sys.columns where name = 'NewColumnName' and object_name(object_id) = 'TableName') EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN'; 

您可以使用sp_rename来重命名列。

 USE YourDatabase; GO EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN'; GO 

第一个参数是要修改的对象,第二个参数是将要提供给对象的新名称,第三个参数COLUMN通知服务器重命名为column ,还可以用来重命名tablesindexalias data type

由于我经常来这里,然后想知道如何使用括号,这个答案可能对像我这样的人有用。

 EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • OldColumnName不能在[] 。 不起作用。
  • 不要把NewColumnName放到[] ,它会导致[[NewColumnName]]