2014-06-17 78 views
2

我的问题是如果我的表是空的或我使用max函数的列没有我指定的值,那为什么是sqlDataReader.hasRows TRUE?检查SQL MAX()函数返回null

它给出了一个空记录...我该如何解决这个问题?

在此先感谢。

+0

有一排。它是一个包含“NULL”列的行。这就是为什么'hasRows'返回'true'。不要混淆“不返回行”的情况和“一行已返回,它包含'NULL's” –

回答

5

像MAX()这样的集合函数总是会为每个组返回一行。在你的情况下,你的组是整个桌子。因此你得到一个带有MAX值的单行结果集。由于表中没有数据,因此MAX值未定义,因此为NULL。

为了更好的理解,试着用COUNT代替MAX。这也将返回一行,但值为0.我认为这更直观,并将帮助您更好地了解发生了什么。

2

将您的查询转化为派生表并在主查询中过滤出null值。

select T.MaxValue 
from (
    -- Your query goes here 
    select max(Value) as MaxValue 
    from YourTable 
    where SomeCol > 10 
    ) as T 
where T.MaxValue is not null 
0

你可以使用:(从TBL SELECT COUNT(*))

选择顶部最大(场)从TBL

0

或者,使用HAVING子句因为有可以与骨料使用功能:

select max(Value) from YourTable where SomeCol > 10 
HAVING max(Value) is not null