Проверка функции SQL MAX(), возвращающей значение null

#sql-server #null #max #sqldatareader

#sql-сервер #null #макс #sqldatareader

Вопрос:

Моя проблема в том, что если моя таблица пуста или столбец, в котором я использую функцию max, не имеет указанного мной значения, то почему SqlDataReader.HasRows TRUE ?

Он выдает нулевую запись … как мне решить эту проблему??

Заранее спасибо.

Комментарии:

1. Есть строка. Это строка, содержащая столбец с NULL . Вот почему hasRows возвращает true . Не путайте ситуацию «строки не возвращаются» с «строка была возвращена, она содержит NULL

Ответ №1:

Агрегатная функция, такая как MAX(), всегда будет возвращать одну строку на группу. В вашем случае ваша группа — это целая таблица. Таким образом, вы получаете набор результатов в одну строку с максимальным значением. Поскольку в вашей таблице нет данных, значение MAX не определено, поэтому равно NULL.

Для лучшего понимания попробуйте заменить MAX на COUNT . Это также вернет одну строку, но со значением 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
  

Ответ №3:

Или используйте предложение HAVING, потому что HAVING можно использовать с агрегатными функциями:

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

Ответ №4:

вы можете использовать:

выберите top(выберите COUNT(*) из tbl) max(поле) из tbl