SQL Server 中区分大小写的变量名? [关闭]

Posted

技术标签:

【中文标题】SQL Server 中区分大小写的变量名? [关闭]【英文标题】:Case sensitive variable names in SQL Server? [closed] 【发布时间】:2012-12-25 14:41:12 【问题描述】:

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

【问题讨论】:

那么,变量大小写不同吗?我的意思是,它可能只是没有声明(在范围内).. 创建/发布一个显示问题的最小测试用例。 实例的排序规则是什么?使用下面的 tsql 来查找排序规则? SELECT DATABASEPROPERTYEX('DatabaseName', 'Collat​​ion') SQLCollat​​ion; @Hiten004,我已经提供了上面的排序规则。 将数据库名称更改为您的数据库! @Hiten004,请参阅上述更改。 【参考方案1】:

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

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

sp_helptext 也是如此,它是在数据库 master 中以小写形式定义的存储过程。所以当你打电话给SP_HELPTEXT 时找不到它。

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

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

SELECT SERVERPROPERTY('collation');

来自SQL Server Books Online:

COLLATE (Transact-SQL)

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

实例级对象的标识符(例如登录名和数据库名称)分配给实例的默认排序规则。

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

例如,可以在具有区分大小写排序规则的数据库中创建两个名称仅在大小写不同的表,但不能在具有不区分大小写排序规则的数据库中创建。如需更多信息,请参阅Database Identifiers。

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

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

另见

MSDN forums: Why are my SP's throwing a case error when pushing to a db using BIN collation? Case sensitive variables in SQL Server SQL Server stored procedure case sensitive?

【讨论】:

服务器排序规则是 Latin1_General_BIN。我的本地机器上有一个多数据库,我认为修改每个触发器和存储过程非常繁琐。我在使用 Win XP 32 位时没有遇到过这样的问题,但现在我迁移到了 Win 7 64 位操作系统,我只是希望它没有连接到问题上。我想问是否有办法修改服务器排序规则,请帮忙。谢谢。 我可以更改服务器排序规则,但这并不容易。 Set or Change the Server Collation 尽管我的问题已作为题外话关闭,但我想分享我是如何解决问题的,我想感谢 Mikael 的评论,因为它查明了根本原因。我已按照此链接中的步骤操作,sp-configure.com/change-sql-server-default-collation 但是这个过程花了很长时间,然后我不得不停止正在进行的过程。我决定卸载 SQL Server 2000 ,重新启动机器然后再次安装它,在安装设置期间我选择了正确的服务器排序规则。系统存储过程(Transact-SQL)现在可以正常工作,无论是输入还是小写或大写。 @Alex,很高兴听到您解决了这个问题。我的“投票结束”是将问题移至DBA 的投票,在那里您的问题会被比我提供的更多专业人士看到,也许您会在那里收到不同/更好的建议。

以上是关于SQL Server 中区分大小写的变量名? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中区分变量名和数据库字段名

在 SQL Server 2008 中区分两个表架构的最简单方法是啥?

Spark 中区分大小写的连接

.emacs 中区分大小写的 setq 无效

MS Access 中区分大小写的搜索

JavaScript测验——变量名大小写---第6关