尽管不区分大小写的排序规则,Sql server 2005仍然会区分大小写

时间:2009-12-30 07:21:26

标签: sql sql-server sql-server-2005

我遇到了以下问题。即使是不区分大小写的排序规则。 SQL服务器以不同方式处理@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".

编辑: -

这个查询在我的本地机器上运行。我试了一下,没有错误。

2 个答案:

答案 0 :(得分:3)

From MSDN:

  

标识符整理

     

标识符的排序规则取决于   在它定义的级别上。   实例级对象的标识符,   例如登录和数据库名称   分配了默认排序规则   实例。对象的标识符   在数据库中,例如表,   视图和列名称已分配   数据库的默认排序规则。   变量,GOTO标签,临时   存储过程和临时   可以在创建表时创建   连接上下文与   一个数据库,然后引用   上下文已切换到   另一个数据库因此,   变量的标识符,GOTO   标签和临时表都在   实例的默认排序规则

因此,即使您尝试声明数据库的排序规则,变量也始终使用SQL Server实例的默认排序规则。

如果您刚刚将数据库重新安装到新实例中,则应考虑升级代码以符合新的排序规则(可能是我要做的),或者follow this document on how to change the instance collation

但实际上,随机引用变量引用似乎有点草率;)

答案 1 :(得分:0)

整理处理数据(值);不是标识符名称。

除非您将语句作为单独的批处理运行,否则您的样本没有理由失败,因为您的声明只有批处理的本地范围。

  • 如果你一次一个地运行这些陈述......那就是你的问题!
  • 否则,请检查您已配置为批处理分隔符的内容;默认值为GO