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'