Sql 变量已声明,但错误消息显示未声明

Sql 变量已声明,但错误消息显示未声明,sql,sql-server,Sql,Sql Server,在如下所示的存储过程中,我收到了此错误,但我声明了@备注,因此我看不出问题出在哪里: Msg 137,15级,状态2,程序sp\U插入\U EMR\U患者检查\U跟踪,第53行 必须声明标量变量“@comments” 代码: 参数@comments是使用camel-case声明的,稍后在存储过程中您将其引用为@comments-可能是您使用了区分大小写的排序规则,这将导致您看到的错误 如果数据库排序规则包含“\u CI”(例如Latin1\u General\u CI\u AS),则它不区分大小

在如下所示的存储过程中,我收到了此错误,但我声明了
@备注
,因此我看不出问题出在哪里:

Msg 137,15级,状态2,程序sp\U插入\U EMR\U患者检查\U跟踪,第53行
必须声明标量变量“@comments”

代码:


参数@comments是使用camel-case声明的,稍后在存储过程中您将其引用为@comments-可能是您使用了区分大小写的排序规则,这将导致您看到的错误


如果数据库排序规则包含“\u CI”(例如Latin1\u General\u CI\u AS),则它不区分大小写,如果它包含“\u CS”,则它是区分大小写的排序规则。

根据错误信息,服务器设置为区分大小写。这可以通过

SELECT CONVERT (varchar, SERVERPROPERTY('collation'));
在区分大小写的服务器上运行上述语句将返回,
SQL\u Latin1\u General\u CP1\u CS\u AS

若要绕过该错误,必须将定义的
@comments
重命名为
@comments
,或附加
COLLATE
语句以将敏感度更改为不区分大小写。在我的服务器上,这将是
SQL\u Latin1\u General\u CP1\u CI\u AS

更好的选择是与变量命名约定保持一致

在同一个区分大小写的服务器上

DECLARE @value VARCHAR(10) = 'hello'
SELECT @VALUE                                        <<< ERROR.


SELECT @value COLLATE SQL_Latin1_General_CP1_CI_AS   <<< returns, 'hello'
DECLARE@value VARCHAR(10)='hello'

选择@VALUE似乎您的服务器已设置为区分大小写,因此
@comments
与您的
@comments
侧边变量不同。注意:您不应在存储过程中使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!
DECLARE @value VARCHAR(10) = 'hello'
SELECT @VALUE                                        <<< ERROR.


SELECT @value COLLATE SQL_Latin1_General_CP1_CI_AS   <<< returns, 'hello'