首页 文章

重命名SQL Server 2008列

提问于
浏览
512

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

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

此声明不起作用 .

10 回答

  • 949

    @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
    
  • 50

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

  • 0

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

    第一道

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


    第二种方式

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

    例如:

    To Rename column name


    第三道

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

    • 右键单击包含需要重命名的列的表 .

    • 单击设计 .

    • 在表格设计面板中,单击并编辑要更改的列名称的文本框 .

    例如:
    MSSMS Table Design Example

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

  • 16

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

    • 创建具有相同数据类型和新名称的新列 .

    • 运行UPDATE / INSERT语句将所有数据复制到新列中 .

    • 删除旧列 .

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

    来自documentation

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

  • 9

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

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

  • 15

    您可以使用sp_rename重命名列 .

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

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

  • 1

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

    EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN';
    
    • OldColumnName 不得在 [] . 不起作用 .

    • 不要将 NewColumnName 放入 [] ,它会导致 [[NewColumnName]] .

  • 10

    尝试:

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

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

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

    Note: 执行此SP时,sql server会给出一条警告消息“注意:更改对象名称的任何部分可能会破坏脚本和存储过程” . 这只有在编写了自己的sp涉及列的情况下才是至关重要的 . 你要改变的 table .

  • 83

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

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

相关问题