742

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

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

这种说法是行不通的。

4

11 回答 11

1355

利用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'

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

于 2013-04-30T09:37:16.023 回答
126

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

第一种方式

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


第二种方式

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

例如:

重命名列名


第三条路

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

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

例如: MSSMS 表设计示例

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

于 2014-02-06T16:46:09.257 回答
68

尝试:

EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
于 2013-04-30T09:39:08.837 回答
36

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

消息 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';
于 2015-11-19T13:08:51.060 回答
20

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

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

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

文档中:

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

于 2013-06-27T12:30:28.453 回答
20

您可以使用sp_rename重命名列。

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

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

于 2017-06-20T13:22:27.717 回答
19

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

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • OldColumnName不能在[]. 不起作用。
  • 不要投入NewColumnName[]会导致投入[[NewColumnName]]
于 2017-08-25T07:00:10.747 回答
4

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

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

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

于 2018-05-08T13:28:41.127 回答
3

@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
于 2018-07-10T07:35:14.470 回答
-1

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

于 2018-09-13T18:10:51.957 回答
-3

运行查询:

    SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'
于 2020-01-31T05:47:15.847 回答