【发布时间】:2009-04-22 03:25:20
【问题描述】:
在 .NET 项目中,我需要验证字符串是否是有效的 Microsoft SQL Server 2005 参数标识符。
例子: SELECT * FROM table WHERE column = @parameter
是否有运行时类方法来验证字符串是否为参数,或者是否有正则表达式来验证规则?(见下文)
From the documentation on identifiers,参数应符合这些通用标识符规则:
- 第一个字符必须是以下之一: * 定义的字母 通过 Unicode 标准 3.2。这 字母的Unicode定义包括 从 a 到 z 的拉丁字符, 从 A 到 Z,还有字母 来自其他语言的字符。 * 下划线 (_)、at 符号 (@) 或 数字符号 (#)。
某些符号 在标识符的开头有 SQL Server 中的特殊含义。一种 以 at 符号始终表示本地 变量或参数,不能是 用作任何其他类型的名称 目的。开头的标识符 数字符号表示临时 表或程序。一个标识符 以双数字符号 (##) 开头 表示全局临时对象。 虽然数字符号或双 数字符号字符可用于 开始其他类型的名称 对象,我们不建议这样做 实践。一些 Transact-SQL 函数 名称以 double at 开头 标志 (@@)。为了避免混淆 这些功能,你不应该使用 以@@ 开头的名称。- 后续字符可以包括以下内容: * 定义的字母 在 Unicode 标准 3.2 中。 * 来自 Basic 的十进制数 拉丁文或其他国家文字。 * at 符号、美元符号 ($)、数字 符号或下划线。
- 标识符不能是 Transact-SQL 保留字。 SQL 服务器 保留大写和 保留字的小写版本。
- 不允许嵌入空格或特殊字符。
- 不允许使用补充字符。
当标识符用于 Transact-SQL 语句, 不符合的标识符 这些规则必须由 双引号或括号。
由于我只想验证参数,因此标识符必须以 @ 符号开头,并且不能被分隔。
【问题讨论】:
-
您是在尝试从某个应用程序解析 SQL,还是想在之后运行 SQL 语句?
标签: .net sql-server regex tsql