我使用SQL Server 2008和Navicat。我需要使用SQL重命名表中的列。
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
这个说法不成立。
我使用SQL Server 2008和Navicat。我需要使用SQL重命名表中的列。
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
这个说法不成立。
当前回答
可以使用sp_rename重命名列。
USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
第一个参数是要修改的对象,第二个参数是将赋予对象的新名称,第三个参数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,其中涉及您要更改的表中的列时,这才至关重要。
除了SQL之外,您还可以在Microsoft SQL Server Management Studio中执行此操作。下面是一些使用GUI的快速方法:
第一个方法
缓慢双击列。列名将成为一个可编辑的文本框。
第二种方式
右键单击列并从上下文菜单中选择“重命名”。
例如:
第三条道路
当您需要一次性重命名多个列时,这种方式更可取。
右键单击包含需要重命名的列的表。 点击设计。 在表设计面板中,单击并编辑要更改的列名的文本框。
例如:
注意:我知道OP特别要求SQL解决方案,认为这可能有助于其他人:)
这将是一个很好的建议,使用一个已经内置的函数,但另一种方法是:
创建一个具有相同数据类型和new NAME的新列。 运行UPDATE/INSERT语句将所有数据复制到新列中。 删除旧的列。
使用sp_rename的好处是它处理了与它相关的所有关系。
从文档中可以看到:
每当重命名PRIMARY KEY或UNIQUE约束时,sp_rename会自动重命名关联的索引。如果重命名的索引绑定到PRIMARY KEY约束,那么PRIMARY KEY约束也会通过sp_rename自动重命名。sp_rename可用于重命名主要和次要XML索引。
可以使用sp_rename重命名列。
USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
第一个参数是要修改的对象,第二个参数是将赋予对象的新名称,第三个参数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';