[英]Sql server 2005 acting case sensitive inspite of case insensitive collation
我遇到以下问题。即使不区分大小写的排序规则也是如此。 SQL Server对@Result
和@result
处理不同。 我错过了什么吗?请帮忙。
SELECT DATABASEPROPERTYEX('OA_OPTGB_0423', 'Collation') SQLCollation;
SQL_Latin1_General_CP1_CI_AS
DECLARE @Result varchar(2000)
SELECT TOP 1 @result = addr.address_id
FROM dbo.address addr
JOIN dbo.company_address compadd ON addr.address_id = compadd.address_id
ORDER BY addr.address_id desc
...引发此错误:
Msg 137, Level 15, State 1, Line 2
Must declare the scalar variable "@result".
编辑:-
同样的查询在我的本地机器上也有效,我尝试了一下,没有错误。
标识符归类
标识符的排序规则取决于其定义的级别。 实例级对象的标识符(例如登录名和数据库名称)被分配了实例的默认排序规则。 数据库中对象的标识符(例如表,视图和列名)被分配数据库的默认排序规则。 当连接上下文与一个数据库关联时,可以创建变量,GOTO标签,临时存储过程和临时表,然后在上下文切换到另一数据库时引用它们。 因此,变量的标识符,GOTO标签和临时表位于实例的默认排序规则中 。
因此,即使您尝试声明数据库的排序规则,变量始终将使用SQL Server实例的默认排序规则。
如果您刚刚将数据库重新安装到一个新实例中,则应考虑升级代码以符合新排序规则(可能是我会做的事情),或者按照本文档的有关如何更改实例排序规则的说明进行操作 。
确实,随机大小写变量引用似乎有点草率;)
整理处理数据(值); 不是标识符名称。
除非您将语句作为单独的批处理运行,否则您的示例没有理由失败,因为声明仅具有该批处理局部的作用域。
GO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.