重命名列SQL Server 2008

Rename column SQL Server 2008

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

1
ALTER TABLE TABLE_NAME RENAME COLUMN old_name TO new_name;

这句话行不通。


使用sp_rename

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

请参见:SQL Server–如何重命名列名或表名

文档:sp_rename(Transact-SQL)

对于您的情况,它将是:

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

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


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

第一条路

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

第二路

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

例如:

To Rename column name

第三方向

当需要一次重命名多个列时,最好使用这种方法。

  • 右键单击包含需要重命名的列的表。
  • 单击"设计"。
  • 在"表设计"面板中,单击并编辑要更改的列名称的文本框。
  • 例如:氧化镁

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


    尝试:

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

    还应指定表的架构,否则可能会出现此错误:

    Msg 15248, Level 11, State 1, Procedure sp_rename, Line 238 Either the
    parameter @objname is ambiguous or the claimed @objtype (COLUMN) is
    wrong.

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

    1
    2
    3
        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';


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

  • 创建具有相同数据类型和新名称的新列。
  • 运行update/insert语句将所有数据复制到新列中。
  • 删除旧列。
  • 使用sp_rename的好处在于它处理了与之相关的所有关系。

    从文档中:

    sp_rename automatically renames the associated index whenever a PRIMARY KEY or UNIQUE constraint is renamed. If a renamed index is tied to a PRIMARY KEY constraint, the PRIMARY KEY constraint is also automatically renamed by sp_rename. sp_rename can be used to rename primary and secondary XML indexes.


    可以使用sp_rename重命名列。

    1
    2
    3
    4
    USE YourDatabase;  
    GO  
    EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';  
    GO

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


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

    1
    EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN';

    • OldColumnName不能在[]中。它不起作用。
    • 不要把NewColumnName放进[]中,会导致[[NewColumnName]]

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

    语法:sp_rename'[表名称]。old_column_name'、'new_column_name'有关进一步的帮助,请参阅本文:sp_rename by microsoft docs

    注意:在执行此sp时,SQL Server将向您发出一条警告消息:"警告:更改对象名称的任何部分都可能破坏脚本和存储过程"。只有在编写了自己的sp(该sp涉及要更改的表中的列)时,这一点才至关重要。


    @taher的改进版

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    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


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