重命名列SQLServer 2008

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

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

这个声明不起作用。

1413794 次浏览

使用sp_rename

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

见:SQL服务器-如何重命名列名或表名

文档:sp_rename(Transact-SQL)

对于您的情况,它将是:

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

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

尝试:

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

使用已经内置的函数是一个很好的建议,但另一种方法是:

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

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

留档

sp_rename在重命名PRIMARYKEY或UNIQUE约束时自动重命名关联的索引。如果重命名的索引绑定到PRIMARYKEY约束,则sp_rename也会自动重命名PRIMARYKEY约束。sp_rename可用于重命名主要和次要XML索引。

或者SQL,您可以在MicrosoftSQLServer Management Studio中执行此操作。以下是使用GUI的一些快速方法:

第一种方式

缓慢双击列。列名将成为可编辑的输入框。


第二条路

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

例如:

重命名列名


第三条路

当您需要一次重命名多个列时,这种方式更可取。

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

例如:MSSMS表设计示例

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

您还应该指定表的架构,否则您可能会收到此错误:

Msg 15248, Level 11, State 1,程序sp_rename, Line 238参数@对象名称不明确或声称的@对象类型(COLUMN)是错了

如果它是一个部署脚本,我还建议为其添加一些额外的安全性。

IF EXISTS (SELECT 1FROM sys.columnsWHEREname = 'OldColumnName' ANDobject_name(object_id) = 'TableName') ANDNOT EXISTS (SELECT 1FROM sys.columnsWHEREname = 'NewColumnName' ANDobject_name(object_id) = 'TableName')EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN';

您可以使用sp_rename重命名列。

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

第一个参数是要修改的对象,第二个参数是将赋予对象的新名称,第三个参数通知服务器重命名为column,也可用于重命名tablesindexalias data type

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

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

Sql Server Management Studio有一些系统定义的存储过程(SP)
其中一个用于重命名列。SP是sp_rename

语法:sp_rename'[table_name].old_column_name','new_column_name'
如需更多帮助,请参阅本文:sp_renameMicrosoft Docs

备注:在执行这个SP时,sql服务器会给你一个警告消息作为'警告:更改对象名称的任何部分都可能会破坏脚本和存储过程'。只有当你编写了自己的sp,其中涉及你要更改的表中的列时,这才是至关重要的。

改进版@Taher

DECLARE @SchemaName AS VARCHAR(128)DECLARE @TableName AS VARCHAR(128)DECLARE @OldColumnName AS VARCHAR(128)DECLARE @NewColumnName AS VARCHAR(128)DECLARE @ParamValue AS VARCHAR(1000)
SET @SchemaName = 'dbo'SET @TableName = 'tableName'SET @OldColumnName = 'OldColumnName'SET @NewColumnName = 'NewColumnName'SET @ParamValue = @SchemaName + '.' + @TableName + '.' + @OldColumnName
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)BEGINEXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';END

或者,您可以在Management Studio中缓慢单击SQL列两次,然后通过UI重命名它。

运行查询:

    SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'