我们将为我们的客户提供一个工具(其中包括)创建一个新的SQL Server数据库,并且我希望能够对他们提供的数据库名称进行基本验证。 SQL Server的文档解释了什么字符在数据库名称中是有效的。但是,文档显然是不正确的,因为我可以成功创建名称违反了文档规则的数据库。什么字符在SQL Server数据库名称中有效?
根据SQL Server的文档CREATE DATABASE,数据库名称必须符合标识符的规则;并且identifiers的规则取决于数据库兼容级别。当兼容级别为100时(根据SQL Server Management Studio的意思是“SQL Server 2008”),名称必须以Unicode字母_
,@
或#
开头;后跟一个或多个字母,数字,@
,$
,#
或_
。文档明确指出,不允许嵌入空格或特殊字符。因为我可以使用SQL Server Management Studio创建名称为This & That | "Other"
的数据库 - 它不仅包含嵌入空格(明确禁止),还包含特殊字符(|
, "
)甚至在一个文件名中都不是有效的。我检查了一下,数据库的兼容级别确实是“SQL Server 2008(100)”,尽管它的名字在该兼容级别被记录为无效。
哎呀,我甚至可以做CREATE DATABASE " "
(是的,这是一个空格),这证明了第一个字符不不必须是字母,下划线,@符号,或井号。
所以我想我的问题是,什么字符是有效的SQL Server数据库名称?是否有任何符合SQL Server实际行为的书面规则?
是什么在使用无效或极不寻常的字符(个),数据库,表等名称的价值?除了确保那些必须使用数据库的人诅咒你的名字...... – 2010-11-17 00:21:20
这将由用户决定要调用数据库的内容。如果他们想挑选一个可怜的名字,我的理解就是我们不想阻止他们。 (这可能会改变,但我至少想知道我们应该如何处理。) – 2010-11-17 04:21:39