我们将为我们的客户提供一个工具(除其他外)创建一个新的 SQL Server 数据库,我希望能够对他们提供的数据库名称进行基本验证。SQL Server 的文档解释了数据库名称中的有效字符。但是,文档显然不正确,因为我可以成功创建名称违反记录规则的数据库。
根据 SQL Server 的CREATE DATABASE文档,数据库名称必须符合标识符规则;标识符的规则取决于数据库的兼容性级别。当兼容级别为 100 时(根据 SQL Server Management Studio,它的意思是“SQL Server 2008”),名称必须以 Unicode 字母、、、_
或@
;#
开头 后跟一个或多个字母、数字、@
、$
、#
或_
. 该文档明确指出不允许嵌入空格或特殊字符。
这与现有证据背道而驰,因为我可以使用 SQL Server Management Studio 创建一个名称为的数据库This & That | "Other"
-- 它不仅包含嵌入的空格(明确禁止),而且还包含特殊字符 ( |
, "
)在文件名中有效。我检查了一下,数据库的兼容级别确实是“SQL Server 2008 (100)”,尽管它的名称在该兼容级别被记录为无效。
哎呀,我什至可以这样做CREATE DATABASE " "
(是的,那是一个空格),这证明了第一个字符不必是字母、下划线、at 符号或井号。
所以我想我的问题是,SQL Server 数据库名称中哪些字符是有效的?是否有任何与 SQL Server 的实际行为一致的记录规则?