我需要知道在SQL参数名称中使用的有效字符是什么。
给定一个简单的类似SELECT * FROM tblTest WHERE testid = @[X],例如,如果X包含连字符,则该语句将失败。参数名称的有效字符是什么?
SELECT * FROM tblTest WHERE testid = @[X]
在您的SQL联机丛书中搜索“标识符”,您应该找到:
常规标识符规则
常规标识符格式的规则取决于数据库兼容性级别。可以使用sp_dbcmptlevel来设置此级别。当兼容性级别为90时,适用以下规则: 第一个字符必须是以下字符之一: Unicode标准3.2定义的字母。字母的Unicode定义包括从a到z, 从A到Z的拉丁字符,以及其他语言的字母字符。 下划线(_),符号(@)或数字符号(#)。 标识符开头的某些符号在SQL Server中具有特殊含义。以at符号开头的常规标识符始终表示局部变量或参数,不能用作任何其他类型的对象的名称。以数字符号开头的标识符表示临时表或过程。以双数字符号(##)开头的标识符表示全局临时对象。尽管可以使用数字符号或双数字符号字符开头其他类型的对象的名称,但我们不建议您这样做。 某些Transact-SQL函数的名称以符号双(@@)开头。为避免与这些功能混淆,请勿使用以@@开头的名称。 后续字符可以包括以下内容: Unicode标准3.2中定义的字母。 来自基本拉丁语或其他国家文字的小数。 at符号,美元符号($),数字符号或下划线。 标识符不得为Transact-SQL保留字。SQL Server保留保留字的大写和小写版本。不允许使用空格或特殊字符。不允许使用补充字符。
常规标识符格式的规则取决于数据库兼容性级别。可以使用sp_dbcmptlevel来设置此级别。当兼容性级别为90时,适用以下规则:
第一个字符必须是以下字符之一:
标识符开头的某些符号在SQL Server中具有特殊含义。以at符号开头的常规标识符始终表示局部变量或参数,不能用作任何其他类型的对象的名称。以数字符号开头的标识符表示临时表或过程。以双数字符号(##)开头的标识符表示全局临时对象。尽管可以使用数字符号或双数字符号字符开头其他类型的对象的名称,但我们不建议您这样做。
某些Transact-SQL函数的名称以符号双(@@)开头。为避免与这些功能混淆,请勿使用以@@开头的名称。
后续字符可以包括以下内容:
标识符不得为Transact-SQL保留字。SQL Server保留保留字的大写和小写版本。不允许使用空格或特殊字符。不允许使用补充字符。
在您的SQL联机丛书中搜索“分隔标识符”,您应该找到:
标识符的主体可以包含当前代码页中字符的任何组合,但定界字符本身除外。例如,带分隔符的标识符可以包含空格,对常规标识符有效的任何字符以及以下任何一个字符。 tilde (~) hyphen (-) exclamation point (!) left brace ({) percent (%) right brace (}) caret (^) apostrophe (') ampersand (&) period (.) left parenthesis (() backslash (\) right parenthesis ()) accent grave (`)
标识符的主体可以包含当前代码页中字符的任何组合,但定界字符本身除外。例如,带分隔符的标识符可以包含空格,对常规标识符有效的任何字符以及以下任何一个字符。
tilde (~) hyphen (-) exclamation point (!) left brace ({) percent (%) right brace (}) caret (^) apostrophe (') ampersand (&) period (.) left parenthesis (() backslash (\) right parenthesis ()) accent grave (`)