两个相同的查询,一个带有 SQL 参数,另一个带有提供不同结果集的硬编码字符串值

Two Identical queries one with SQL parameter and other with hard code string value providing different result set

两个相同的查询在 where 子句中返回不同的结果。第一个查询使用 SQL 参数变量 ,第二个查询使用 字符串值 ,如下所述。两个查询的结果应该相同,因为它们具有相同的值,但它没有发生。这可能是什么原因?

Declare @messageID AS INT=720987
Declare @replyfileType AS Varchar='Audio'

select VoiceMessageReply from MDBDetails where MessageID = @messageID and FileType=@replyfileType

select VoiceMessageReply from MDBDetails where MessageID = @messageID and FileType='Audio'

结果如下:- Query results

此声明:

Declare @replyfileType AS Varchar = 'Audio';

声明的是单字符串,所以等价于:

Declare @replyfileType AS Varchar(1) = 'A';

总是 在 SQL 服务器中使用字符串时包含长度!

Declare @replyfileType AS Varchar(255) = 'Audio';

我应该注意,如果您打印出来 @replyfileType,错误会很明显。