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

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

这个说法不成立。


当前回答

或者你可以在SQL Management Studio中慢点两次列并通过UI重命名它…

其他回答

@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

运行查询:

    SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'

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

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

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

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

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

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

从文档中可以看到:

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

Try:

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