验证.NET或正则表达式中的MSSQL标识符(参数)

时间:2009-04-22 03:25:20

标签: .net sql-server regex tsql

在.NET项目中,我需要验证字符串是否是有效的Microsoft SQL Server 2005参数标识符。

示例: SELECT * FROM table WHERE column = @parameter

是否有运行时类方法来验证字符串作为参数,还是有正则表达式来验证规则?(见下文)

From the documentation on identifiers,参数应符合这些通用标识符规则:

  
      
  1. 第一个字符必须是以下之一:*定义的字母   通过Unicode标准3.2。该   字母的Unicode定义包括   从a到z的拉丁字符,   从A到Z,还有信   其他语言的字符。 *   下划线(_),符号(@)或   数字符号(#)。
    某些符号   在标识符的开头有   SQL Server中的特殊含义。一个   以...开头的常规标识符   at符号始终表示本地   变量或参数并不能   用作任何其他类型的名称   宾语。以...开头的标识符   数字符号表示临时符号   表或程序。一个标识符   以双号码开头(##)   表示全局临时对象。   虽然数字符号或双倍   数字符号字符可用于   开始其他类型的名称   对象,我们不推荐这个   实践。一些Transact-SQL函数   名字以double开头   标志(@@)。避免混淆   这些功能,你不应该使用   以@@。
  2. 开头的名称   
  3. 后续字符可包括以下内容:*已定义的字母   在Unicode标准3.2中。 *   来自Basic的十进制数字   拉丁文或其他国家文字。 *   at符号,美元符号($),数字   签名或下划线。
  4.   
  5. 标识符不能是Transact-SQL保留字。 SQL Server   保留大写和   小写版本的保留字。
  6.   
  7. 不允许使用嵌入空格或特殊字符。
  8.   
  9. 不允许使用补充字符。
  10.         

    使用标识符时   Transact-SQL语句,   不符合的标识符   这些规则必须由以下划定   双引号或括号。

由于我只想验证参数,因此标识符必须以@符号开头,并且不得分隔。

2 个答案:

答案 0 :(得分:6)

我对Unicode字符类感到磕磕绊绊,但是一旦我发现.NET正则表达式支持它们,我想出了以下正则表达式来解决我的问题:

@[\p{L}{\p{Nd}}$#_][\p{L}{\p{Nd}}@$#_]*

这强制执行:

  • 标识符始终以@开头,使其成为参数。
  • 第二个位置的No @允许避免与特殊TSQL函数混淆。
  • 仅允许使用规则中定义的字符。

答案 1 :(得分:0)

我发现这篇文章是关于创建一个用于评估TSQL上的正则表达式的函数,在内部使用VBScript,检查出来here

您可以找到另一个有用的链接,但我认为它需要注册,here

另一个想法可能是将@parameter作为sysname数据类型处理,不知道它是否适合这里