当我执行这种格式的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
答案 0 :(得分:4)
您有一个区分大小写的服务器排序规则。
您的数据库有一个(如您所示)不区分大小写的排序规则但是当您遇到变量的案例问题时,重要的是服务器排序规则。
同样适用于sp_helptext
,它是使用小写在数据库主服务器中定义的存储过程。因此,当您致电SP_HELPTEXT
时,找不到它。
要修复存储过程以使用区分大小写的服务器排序规则,您必须确保对变量@Variable1
的每个引用都是这样。不是@variable1
或@VARIABLE1
。
使用此选项检查您拥有的服务器排序规则。
SELECT SERVERPROPERTY('collation');
COLLATE (Transact-SQL)
标识符的整理取决于其定义的级别。
- 为实例级对象的标识符(例如登录名和数据库名)分配实例的默认排序规则。
数据库中对象的标识符(例如表,视图和列名)将分配数据库的默认排序规则。
例如,可以在具有区分大小写的排序规则的数据库中创建两个名称仅在大小写不同的表,但可能不会在具有不区分大小写的排序规则的数据库中创建。有关详细信息,请参阅Database Identifiers。
变量, GOTO标签,临时存储过程和临时表的标识符为在服务器实例的默认排序规则中。
当连接上下文与一个数据库关联时,可以创建变量,GOTO标签,临时存储过程和临时表,然后在将上下文切换到另一个数据库时引用。