我们将为我们的客户提供一个工具(除其他外)创建一个新的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 " "
(是的,这是一个空格),这证明了第一个字符并没有必须是字母,下划线,@符号,或井号.
所以我想我的问题是,哪些字符在SQL Server数据库名称中有效?是否有任何与SQL Server实际行为一致的文档规则?
在哪里可以看到SQL Server 中的字段varchar
或char
字段中允许的所有"特殊"字符?
我正在寻找一个必须在ms sql server中转义的特殊字符列表,但找不到一个和我看到的类似问题建议使用参数化查询的大部分答案..我已经在做但我正在使用的框架对我没有任何逃避.
因此,我想我会尝试一堆,看看哪一个失败....我尝试了一个简单的查询
select * from x where value = '<characters>'
Run Code Online (Sandbox Code Playgroud)
在这样的查询中,我尝试了几乎所有我能在键盘上找到的角色,而且所有这些角色似乎都能正常工作......除了Singe Quote ......那个失败了.
因此,我想知道无效的字符列表,必须在ms sql server - tsql中进行转义,并且不想冒险只是逃避单引号并留下可能导致麻烦的其余部分
感谢您的帮助