重命名列SQL Server 2008

问题描述 投票:567回答:10

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

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

此声明不起作用。

sql sql-server sql-server-2008 alter-table
10个回答
1059
投票

使用sp_rename

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

见:SQL SERVER – How to Rename a Column Name or Table Name

文档:sp_rename (Transact-SQL)

对于你的情况,它将是:

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

请记住使用单引号括起您的值。


-2
投票

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


91
投票

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

First Way

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


Second Way

右键单击列,然后从上下文菜单中选择“重命名”。

例如:


Third Way

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

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

例如:

注意:我知道OP专门要求SQL解决方案,认为这可能有助于其他人:)


55
投票

尝试:

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

19
投票

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

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

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

    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';

16
投票

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

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

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

来自documentation

每当重命名PRIMARY KEY或UNIQUE约束时,sp_rename都会自动重命名关联的索引。如果重命名的索引绑定到PRIMARY KEY约束,则sp_rename也会自动重命名PRIMARY KEY约束。 sp_rename可用于重命名主XML索引和辅助XML索引。


14
投票

您可以使用sp_rename重命名列。

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

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


11
投票

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

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

3
投票

Sql Server管理工作室有一些系统定义的存储过程(SP) 其中一个用于重命名列.SP是sp_rename

语法:sp_rename'[table_name] .old_column_name','new_column_name' 如需进一步的帮助,请参阅以下文章:sp_rename by Microsoft Docs

注意:在执行此SP时,sql server会给出一条警告消息:'警告:更改对象名称的任何部分可能会破坏脚本和存储过程'。这只有在您编写了自己的涉及列的sp时才至关重要在表中你即将改变。


2
投票

@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
)
BEGIN
    EXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';
END
© www.soinside.com 2019 - 2024. All rights reserved.