两个相同的查询,一个带有 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
,错误会很明显。
两个相同的查询在 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
,错误会很明显。