where-clause - 两个相同的查询,一个带有 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'
结果如下:- 查询结果
解决方案
本声明:
Declare @replyfileType AS Varchar = 'Audio';
声明一个字符的字符串,所以它相当于:
Declare @replyfileType AS Varchar(1) = 'A';
在 SQL Server 中使用字符串时始终包含长度!
Declare @replyfileType AS Varchar(255) = 'Audio';
我应该注意,如果您打印出@replyfileType
错误将是显而易见的。
推荐阅读
- android - Android Studio / Gradle 调试构建需要很长时间
- c# - 一旦在 C# 中创建,如何在整个类中使用相同的对象
- javascript - 如何使用 javascript 滑动到特定的 HTML 元素?
- javascript - 计算器在本地存储中的历史记录,即使在刷新时也是如此
- r - 显示 ggalluvium 的流量
- pyqt5 - QGraphicsSimpleTextItem() 慢速缩放和平移交互的 setRotation 方法
- r - 修复 Excel 中作为整数和字符日期混合导入 R 的日期列
- twitter-bootstrap - Bootstrap 4 响应式表格:如何固定列宽并使表格始终占据父元素的 100% 宽度?
- typescript - 打字稿:收集对象数组的属性的所有字符串文字
- x86 - Grub 报告“不支持标签 0x0a”