如何使用T-SQL重命名列名

60

我需要关于 SQL Server 表列的帮助。 我正在尝试重命名列名,但这不起作用。

USE COST_mesta_test
GO
EXEC sp_rename '[dbo].[1965$].obec' , 'people' , 'COLUMN'
GO

我尝试了不同的方括号[]和表"obec"的路径(例如:1965.obec; 1965$.obec; 1965.[obec];等)。 但是仍然出现错误:

参数@objname不明确,或者所声称的@objtype(COLUMN)是错误的。

2个回答

113

我不太理解你的表是如何设置的,例如表名、列名等等,所以这里给出一个重命名列的存储过程示例:

如果我的表长这样:

CREATE TABLE [dbo].[Company](
[ID] [int],
[CompanyName] [varchar](20)
)

我想修改[CompanyName]列,这是命令:

EXEC sys.sp_rename 
    @objname = N'dbo.Company.CompanyName', 
    @newname = 'Name', 
    @objtype = 'COLUMN'

我怀疑您的第一个参数不正确。

根据文档(sp_rename (Transact-SQL))

如果要重命名的对象是表中的列,则 object_name 必须采用 table.column 或者 schema.table.column 的形式。如果要重命名的对象是索引,则 object_name 必须采用 table.index 或者 schema.table.index 的形式。


1
请注意:虽然答案中没有明确说明,但为了确认(因为原始问题似乎由于此原因而出现错误),在调用sp_rename时应删除对象名称中的括号。例如,对于此过程(以及其他使用类似对象名称字符串的MS内部过程),应将'[dbo].[1965$].obec'更改为'dbo.1965$.obec'。 - troy

5
您可以在对象浏览器中右键单击列名并选择“重命名”选项来更改列名。该列名将会被修改。

9
通常不是一个好主意,如果你想创建迁移脚本(这通常是必须的)。 - Erik Bergstedt
5
这个问题是关于使用 T-SQL 重命名,而不是使用对象资源管理器的。这不是一个答案。 - QMaster
@kami 这是问题标题:“如何使用T-SQL重命名列名”,对吗? - QMaster
1
对于具有大量数据的表格,这可能需要相当长的时间来运行,因为它会在后台将数据放入临时表中,然后将数据复制回来。 - Batty McBat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接