【发布时间】:2013-11-20 15:04:27
【问题描述】:
当我执行查询时
select * from Brands where int1 = 1 and iswebactive=0 and ESHOP_CODE=1
在 Sql Server 中,服务器返回 2 行。 当我执行查询时
select * from Brands where isnull(int1,0) = 1 and iswebactive=0 and ESHOP_CODE=1
Sql 服务器返回多于 2 行。问题是 int1=1 有 650000 条记录,但第一个查询只返回 2 行。 字段类型有:
int1 : int
iswebactive : tinyint
ESHOP_CODE : smallint
为什么会这样?
select int1,* from Brands where int1 = 1 and iswebactive=0 and ESHOP_CODE=1
(返回 58 行。)
select int1,* from Brands where isnull(int1,0) = 1 and iswebactive=0 and ESHOP_CODE=1
(返回 16134 行)
SQL Server 的版本是 2008 R2 Express。
我的问题是当我使用isnull 函数(第二次查询)结果是正确的!
为什么第一个查询只返回 58 行?
【问题讨论】:
-
您是否有一个示例数据行,用于第二个查询但不是第一个查询?以及您使用的是什么版本的 SQL(包括服务包)?
-
这很奇怪。话虽如此,请不要在 where 子句中使用 isnull 。只能使用
IS NULL或IS NOT NULL,否则你是在问心痛。 -
您应该向我们提供一个 SQLFiddle 来向我们展示该错误
-
这里有一个对你很有帮助的提示:“这总是你的错”。它绝不是操作系统错误、数据库错误或框架错误。它总是你的错误。
-
我发现了发生了什么......我已经有了这 3 列的索引。我发现 int1 的索引值与 int1 的实际值不同。当然,当我重建索引时,一切都很好。所以我想这不是我的错。这是 MSSQL 的错。感谢@uncle brad 的宝贵时间和建议。
标签: sql sql-server sql-server-2008-r2