我遇到了以下问题。即使是不区分大小写的排序规则。 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".
编辑: -
这个查询在我的本地机器上运行。我试了一下,没有错误。
答案 0 :(得分:3)
标识符整理
标识符的排序规则取决于 在它定义的级别上。 实例级对象的标识符, 例如登录和数据库名称 分配了默认排序规则 实例。对象的标识符 在数据库中,例如表, 视图和列名称已分配 数据库的默认排序规则。 变量,GOTO标签,临时 存储过程和临时 可以在创建表时创建 连接上下文与 一个数据库,然后引用 上下文已切换到 另一个数据库因此, 变量的标识符,GOTO 标签和临时表都在 实例的默认排序规则。
因此,即使您尝试声明数据库的排序规则,变量也始终使用SQL Server实例的默认排序规则。
如果您刚刚将数据库重新安装到新实例中,则应考虑升级代码以符合新的排序规则(可能是我要做的),或者follow this document on how to change the instance collation。
但实际上,随机引用变量引用似乎有点草率;)
答案 1 :(得分:0)
整理处理数据(值);不是标识符名称。
除非您将语句作为单独的批处理运行,否则您的样本没有理由失败,因为您的声明只有批处理的本地范围。
GO