如何在SQL Server中重命名名称带有方括号的对象?

15
我有一个表中的列名外面有方括号,[Book_Category],现在我想将它重命名为Book_Category。我尝试了以下查询语句:sp_rename 'BookPublisher.[[Book_Category]]', 'Book_Category', 'COLUMN' 但是我遇到了如下错误:

Msg 15253, Level 11, State 1, Procedure sp_rename, Line 105 Syntax error parsing SQL identifier 'BookPublisher.[[Book_Category]]'。

请问有谁能帮助我吗?

请展示一些代码。 - Max
一般而言:如果对于SQL语法或转义存在疑问,可以在GUI中进行操作,并点击选项以生成脚本。 - Moby Disk
5个回答

26

你可以用与创建它相同的方式来完成它:

exec sp_rename 'BookPublisher."[Book_Category]"', 'Book_Category', 'COLUMN';
这是我创建的一个小示例,旨在测试这是否可能。一开始我只是认为这是关于如何在SQL Server中使用[]的误解,结果证明我错了,原来是可以实现的——你需要在方括号的外面使用双引号。
begin tran

create table [Foo] ("[i]" int);

exec sp_help 'Foo';

exec sp_rename 'Foo."[i]"', 'i', 'column ';

exec sp_help 'Foo';

rollback tran

4

不需要使用双引号。你只需将右方括号加倍即可:

EXEC sp_rename 'BookPublisher.[[Book_Category]]]', 'Book_Category', 'COLUMN';

您可以使用quotename函数自行查找:

SELECT QuoteName('[Book_Category]');
-- Result: [[Book_Category]]]

顺便提一下,这也适用于创建列:

CREATE TABLE dbo.Book (
   [[Book_Category]]] int -- "[Book_Category]"
);

1
这对我有效:

这适用于我:

exec sp_rename ‘[dbo].[TableName].[OldColumnName]’, ‘NewColumnName’

0

这对我有用,当我重命名索引时,我错过了表格。

USE database ;  
GO  
EXEC sp_rename N'Schema.Table.old_INDEX', N'new_INDEX', N'INDEX';  
GO  

1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

0

遇到了这个错误,想知道为什么。如果你要更改的列名不存在,你就会得到这个确切的错误。最好再确认一下,以确保你仍然会得到这个错误。


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