使用 sp_rename 更改列名时出错。 (创建双冒号)

Posted

技术标签:

【中文标题】使用 sp_rename 更改列名时出错。 (创建双冒号)【英文标题】:Mistake made while changing column name using sp_rename. (double colon created) 【发布时间】:2021-03-13 12:48:27 【问题描述】:

我在更改列名时犯了一个错误。我想更改我的 SQL 数据库 (Microsoft SQL Server) 中的列名。我成功了,但我在列名之间加了一个冒号。这就是为什么我现在不能再改名字了。使用方括号并没有解决问题。

它不是“table.column_name”而是“table.table.column_name”。

这也使我无法执行“选择”、“删除”或“更新”语句。这是因为不再找到该列,给我错误 "No item by the name of '[table.new_scheme]' could be found in the current database 'name_database'"

我做了什么:

exec sp_rename 'table.old_column', 'table.new_column'

它应该是什么:

exec sp_rename 'table.old_column', 'new_column'

我阅读并使用了这篇文章(以错误的方式:|)。 How to rename a table in SQL Server?

【问题讨论】:

当您收到此消息时,您能否与我们分享您的尝试:“在当前数据库 'name_database' 中找不到名称为 '[table.new_scheme]' 的项目”?请提供代码,不仅选择更新或删除语句...谢谢! 【参考方案1】:

现在您必须这样做,因此您现在将“table.new_column”列放在双引号或方括号中,如下所示:

exec sp_rename 'dbo.tablename."table.new_column"', 'new_column', 'COLUMN';

exec sp_rename 'dbo.tablename.[table.new_column]', 'new_column', 'COLUMN';

【讨论】:

【参考方案2】:

假设你有一个简单的表:

create table mytable (id int, test int)

而且你更改了第二列的名称:

exec sp_rename 'mytable.test', 'mytable.test2'

您可以通过以下方式重命名它:

exec sp_rename 'mytable."mytable.test2"', 'test2'

这是一个演示:

DEMO

【讨论】:

【参考方案3】:

您需要在文字字符串中分隔标识列:

CREATE TABLE dbo.YourTable (YourColumn int);
GO
EXEC sys.sp_rename N'dbo.YourTable.YourColumn',N'YourTable.NewColumn','COLUMN';
GO
SELECT *
FROM dbo.YourTable;
GO
EXEC sp_rename N'dbo.YourTable.[YourTable.NewColumn]', N'NewColumn', 'COLUMN' 
GO
SELECT *
FROM dbo.YourTable;
GO
DROP TABLE dbo.YourTable;

【讨论】:

【参考方案4】:

您可以使用 SSMS 对象资源管理器执行此操作。截图如下:

【讨论】:

以上是关于使用 sp_rename 更改列名时出错。 (创建双冒号)的主要内容,如果未能解决你的问题,请参考以下文章

SQL实现表名更改,列名更改,约束更改(exec)

SQL如何更改表中的列名称?

SQLSERVER实现更改表名,更改列名,更改约束代码

SQLServer如何修改一列的列名呢?

SP_RENAME

SQLServer如何修改一列的列名呢?