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

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

这个说法不成立。


当前回答

Try:

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

其他回答

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

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

OldColumnName不能在[]中。这是行不通的。 不要在[]中输入NewColumnName,它会生成[[NewColumnName]]。

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

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

Try:

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

你还应该指定表的模式,否则你可能会得到这个错误:

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

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,其中涉及您要更改的表中的列时,这才至关重要。