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

问题描述

两个相同的查询在 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'

结果如下:- 查询结果

标签: where-clausevarcharsql-parametrized-queryvarcharmax

解决方案


本声明:

Declare @replyfileType AS Varchar = 'Audio';

声明一个字符的字符串,所以它相当于:

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

在 SQL Server 中使用字符串时始终包含长度!

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

我应该注意,如果您打印出@replyfileType错误将是显而易见的。


推荐阅读