当我执行这种格式的 SQL 命令时:SP_HELPTEXT Sproc1
。
结果集将显示Could not find stored procedure 'SP_HELPTEXT'
。但是如果我将 SQL 命令替换为小写,例如sp_helptext Sproc1
,肯定会显示Sproc1的内容。
我正在使用Sproc1
在我的程序中以及程序执行时Sproc1
它会返回一条消息:
Must declare the variable '@Variable1'.
尽管我已经声明了该特定变量。
我有一个提示,该问题与排序规则、区分大小写或不敏感的设置有关。有谁知道如何解决吗?
另一种出现区分大小写的变量名的情况:
CREATE PROCEDURE Foo @customerID int AS
PRINT @customerId
您有区分大小写的服务器排序规则。
您的数据库有一个(如您所示)不区分大小写的排序规则,但是当您遇到变量的大小写问题时,重要的是服务器排序规则。
同样适用于sp_helptext
这是在database master中定义的一个小写的存储过程。所以当你打电话时SP_HELPTEXT
没有找到。
要修复您的存储过程以在区分大小写的服务器排序规则中工作,您必须确保对变量的每个引用@Variable1
正是如此。不是@variable1
or @VARIABLE1
.
使用它来检查您拥有的服务器排序规则。
SELECT SERVERPROPERTY('collation');
来自SQL Server 在线书籍 http://technet.microsoft.com/en-us/library/ms184391.aspx:
整理 (Transact-SQL) http://technet.microsoft.com/en-us/library/ms184391.aspx
标识符的排序规则取决于定义它的级别。
- 实例级对象的标识符(例如登录名和数据库名称)被分配实例的默认排序规则。
-
数据库中对象的标识符(例如表、视图和列名)被分配数据库的默认排序规则。
例如,可以在具有区分大小写排序规则的数据库中创建两个名称仅大小写不同的表,但不能在具有不区分大小写排序规则的数据库中创建。有关更多信息,请参阅数据库标识符 http://technet.microsoft.com/en-us/library/ms175874.aspx.
-
的标识符为变量, 转到标签, 临时存储过程, and 临时表位于服务器实例的默认排序规则中。
当连接上下文与一个数据库关联时,可以创建变量、GOTO 标签、临时存储过程和临时表,然后在上下文切换到另一数据库时引用这些变量、GOTO 标签、临时存储过程和临时表。
See also
- MSDN 论坛:为什么我的 SP 在使用 BIN 排序规则推送到数据库时会抛出大小写错误? http://social.msdn.microsoft.com/Forums/en-US/vstsdb/thread/0d833fab-2b32-4b98-a3ab-cdf8c743e5e0
- SQL Server 中区分大小写的变量 https://stackoverflow.com/questions/6559254/case-sensitive-variables-in-sql-server
- SQL Server 存储过程区分大小写吗? https://stackoverflow.com/questions/1399908/sql-server-stored-procedure-case-sensitive
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)