如何使用 [] 重命名列 SQL Server

How to Rename Column SQL Server with []

提问人:AgnesHira 提问时间:6/15/2023 更新时间:6/15/2023 访问量:69

问:

在此处输入图像描述

我输入了错误的列名并包含 [],如上所示 [avail_memory_mb],我想使用语法删除 [],我该怎么做?

我试过使用语法EXEC sp_RENAME '[db_isdv_itsm].[dbo].[tbl_m_comp_sysboot_time].[avail_memory_mb]', 'avail_memory', 'COLUMN'

但出现错误

Msg 15248, Level 11, State 1, Procedure sp_RENAME, Line 247 Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.

sql-server sql-server-2008-r2

评论

0赞 TZHX 6/15/2023
尝试改用以下方法转义列,例如:[][[]]EXEC sp_RENAME '[db_isdv_itsm].[dbo].[tbl_m_comp_sysboot_time].[[avail_memory_mb]]', 'avail_memory', 'COLUMN'
0赞 AgnesHira 6/15/2023
错误消息 15253,级别 11,状态 1,过程 sp_RENAME,第 111 行解析 SQL 标识符“[db_isdv_itsm]时语法出错。[dbo]。[tbl_m_comp_sysboot_time].[[avail_memory_mb]]'。
0赞 Thom A 6/15/2023
sp_rename不允许四部分命名。您需要连接到相关数据库。
0赞 Panagiotis Kanavos 6/15/2023
您真的使用 SQL Server 2008 R2 吗?这是一个 13 年前的版本,现在完全不受支持。不过,SSMS 仍应能够连接到它。使用 GUI 将允许您修复名称,而无需编写实际的 SQL,避免将来出现类似的错误。SSMS 也可以为每个操作生成 SQL 脚本

答:

2赞 Thom A 6/15/2023 #1

在这种情况下,最简单的方法是使用不同的分隔标识符到括号 () 作为列的名称:[]

EXEC sys.sp_rename N'dbo.tbl_m_comp_sysboot_time."[avail_memory_mb]"', N'avail_memory', N'COLUMN';

如果你“必须”使用括号,那么你需要转义右括号():]

EXEC sys.sp_rename N'dbo.tbl_m_comp_sysboot_time.[[avail_memory_mb]]]', N'avail_memory', N'COLUMN';

db<>小提琴

请注意,在这两个示例中,我还删除了数据库名称。这是因为不支持 4 部分命名。首先连接到数据库,然后使用系统过程。sys.sp_rename


如果你需要知道一个对象的字面量应该是什么,你也可以用它来找出它。例如:QUOTENAME

SELECT QUOTENAME(N'[avail_memory_mb]');

这带来了价值。所以,如果你真的想要,你可以做这样的事情:nvarchar(258)[[avail_memory_mb]]]

DECLARE @ObjectPath nvarchar(1000) = CONCAT(QUOTENAME(N'dbo'),N'.',QUOTENAME(N'tbl_m_comp_sysboot_time'),'.',QUOTENAME(N'[avail_memory_mb]'));
EXEC sys.sp_rename @ObjectPath, N'avail_memory', N'COLUMN';