2014-06-17 128 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