3

当我执行这种格式的 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
4

1 回答 1

4

您有区分大小写的服务器排序规则。

您的数据库有一个(如您所示)不区分大小写的排序规则,但是当您遇到变量大小写问题时,重要的是服务器排序规则。

这同样适用sp_helptext于在数据库主控中以小写形式定义的存储过程。所以当你调用SP_HELPTEXT它时没有找到。

要修复您的存储过程以在区分大小写的服务器排序规则中工作,您必须确保对变量@Variable1的每个引用都是如此。不是@variable1@VARIABLE1

使用它来检查您拥有的服务器排序规则。

SELECT SERVERPROPERTY('collation');

SQL Server 联机丛书

整理 (Transact-SQL)

标识符的排序取决于定义它的级别。

  • 实例级对象的标识符(例如登录名和数据库名称)被分配了实例的默认排序规则。
  • 数据库中对象的标识符(例如表、视图和列名)被分配了数据库的默认排序规则。

    例如,可以在具有区分大小写排序规则的数据库中创建两个名称仅在大小写不同的表,但不能在具有不区分大小写排序规则的数据库中创建。有关详细信息,请参阅数据库标识符

  • 变量GOTO 标签临时存储过程临时表的标识符在服务器实例的默认排序规则中。

    变量、GOTO 标签、临时存储过程和临时表可以在连接上下文与一个数据库关联时创建,然后在上下文切换到另一个数据库时进行引用。

也可以看看

于 2013-01-11T06:53:28.803 回答