我有一个数据库,其名称中有括号。(别问!:-\)
它显示在 SSMS 中,但不显示在 Azure 中,因为它在创建时被取消了。它不显示在 Azure 中的数据库列表中。它显示在 SSMS 中,但无法通过右键单击删除。我想使用 SQL 删除它,但我不知道将括号作为数据库名称的字符(而不是转义符/分隔符)包含在语法中。
我尝试了以下方法,但无济于事:
删除数据库 [xxx_2024-07-24]
消息 911,级别 16,状态 1,第 1 行数据库“xxx_2024-07-24”不存在。请确保名称输入正确。
删除数据库 [[xxx_2024-07-24]]
消息 105,级别 15,状态 1,第 1 行 字符串 '[xxx_2024-07-24]' 后的引号未闭合。消息 102,级别 15,状态 1,第 1 行 '[xxx_2024-07-24]' 附近的语法不正确。
删除数据库 [[[xxx_2024-07-24]]]
消息 911,级别 16,状态 1,第 1 行数据库“[[xxx_2024-07-24]”不存在。请确保名称输入正确。
知道删除此数据库的正确语法吗?[xxx_2024-07-24]
SET QUOTED_IDENTIFIER
设置为(ON
应该始终如此):您也可以转义方括号,但是这样的可读性较差:
[
开始分隔标识符。[
是标识符的一部分。]]
进行转义的。]
]
完成分隔标识符。正如马丁·史密斯 (Martin Smith)指出的那样,如果您不记得确切的转义规则,您可以使用QUOTENAME()函数来查看正确的转义。
例如:
好的,我在输入这道题的时候突然想到了解决方案。线索就在最后的错误信息中。
删除数据库 [[[xxx_2024-07-24]]]
消息 911,级别 16,状态 1,第 1 行数据库“ [[xxx_2024-07-24] ”不存在。请确保名称输入正确。
查看错误消息中发出的数据库名称。括号不匹配。末尾有一个,但开头有两个。由此我推断,如果我保留输入的后面三个括号,但将前面的括号减少为两个,则应该可以正常工作:
删除数据库 [[xxx_2024-07-24]]]
是!这有效!
也许有一天我会弄清楚这个编码之谜背后的原因。现在,我要提醒自己和其他人:
不要在任何数据库工件的名称中包含括号作为文字字符!