用于验证SQL Server表名的正则表达式

Rak*_*esh 4 regex sql-server-2008 c#-4.0

我正在使用C#代码创建动态SQL Server表,但我需要验证表名.

什么是验证SQL Server表名的正则表达式?

xan*_*tos 9

链接中描述的正则表达式应该是:

var regex = new Regex(@"^[\p{L}_][\p{L}\p{N}@$#_]{0,127}$");
Run Code Online (Sandbox Code Playgroud)

请注意,通常你必须嵌入表的名称[...],因为规则3(因为SELECT * FROM [SET]是一个有效的查询,因为,虽然SET是一个保留关键字,你可以用它来"逃避"它[...])

请注意,在链接页面中,规则不完整:

来自https://msdn.microsoft.com/en-us/library/ms175874.aspx

  1. 标识符不能是Transact-SQL保留字.SQL Server保留保留字的大写和小写版本.在Transact-SQL语句中使用标识符时,不符合这些规则的标识符必须用双引号或括号分隔.保留的单词取决于数据库兼容级别.可以使用ALTER DATABASE语句设置此级别.

他们忘记了:https://msdn.microsoft.com/en-us/library/ms174979.aspx

是新表的名称.表名必须遵循标识符规则.table_name最多可以包含128个字符,但本地临时表名称(前缀为单个数字符号(#)的名称)除外,不能超过116个字符.

我编写的规则是针对"完整"表,而不是针对临时表,并且不包括模式名称.