【问题标题】:SQL Server - Invalid characters in parameter namesSQL Server - 参数名称中的无效字符
【发布时间】:2009-04-15 13:35:15
【问题描述】:

我需要知道在 SQL 参数名称中使用哪些有效字符。

假设像SELECT * FROM tblTest WHERE testid = @[X] 这样简单,例如,如果 X 包含连字符,则语句将失败。参数名称的有效字符是什么?

【问题讨论】:

    标签: sql sql-server parameters


    【解决方案1】:

    在您的在线 SQL 书籍中搜索“标识符”,您应该会找到:

    正则标识符规则

    常规标识符的格式规则取决于数据库 兼容级别。可以使用 sp_dbcmptlevel 设置此级别。 当兼容级别为 90 时,适用以下规则:

    第一个字符必须是以下之一:

    • Unicode 标准 3.2 定义的字母。字母的 Unicode 定义包括从 a 到 z 的拉丁字符,
      从 A 到 Z,以及其他语言的字母字符。
    • 下划线 (_)、at 符号 (@) 或数字符号 (#)。

    标识符开头的某些符号具有特殊的 在 SQL Server 中的含义。以 at 开头的常规标识符 符号始终表示局部变量或参数,不能使用 作为任何其他类型对象的名称。开始的标识符 带有数字符号的表示临时表或过程。一个 以双数字符号 (##) 开头的标识符表示全局 临时对象。虽然数字符号或双数字符号 字符可用于开始其他类型对象的名称, 我们不推荐这种做法。

    某些 Transact-SQL 函数的名称以双 at 符号开头 (@@)。为避免与这些功能混淆,您不应使用 以@@ 开头的名称。

    后续字符可以包括以下内容:

    • Unicode 标准 3.2 中定义的字母。
    • 来自基本拉丁文或其他国家文字的十进制数字。
    • at 符号、美元符号 ($)、数字符号或下划线。

    标识符不能是 Transact-SQL 保留字。 SQL 服务器 保留保留字的大写和小写版本。 不允许嵌入空格或特殊字符。补充 不允许使用字符。

    在您的在线 SQL 书籍中搜索“分隔标识符”,您应该会找到:

    标识符的主体可以包含 中的任意字符组合 当前代码页,除了 分隔字符本身。为了 例如,分隔标识符可以 包含空格,任何字符都有效 对于常规标识符,以及任何一个 以下字符。

    tilde (~)                hyphen (-)   
    exclamation point (!)    left brace ({)   
    percent (%)              right brace (})   
    caret (^)                apostrophe (')   
    ampersand (&)            period (.)   
    left parenthesis (()     backslash (\)   
    right parenthesis ())    accent grave (`)
    

    马克

    【讨论】:

    • 同样危险:/+=;\r\n,[]*"#和NULL/string.empty,还有@@@sql_server_setting中的@。
    【解决方案2】:

    在联机丛书中搜索标识符 [SQL Server]。它具有参数名称必须遵循的规则。 (这是SQL Server 2008的搜索),其他版本应该是类似的搜索

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2018-04-22
      • 2018-08-08
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多