#sql-server #null #max #sqldatareader
#sql-сервер #null #макс #sqldatareader
Вопрос:
Моя проблема в том, что если моя таблица пуста или столбец, в котором я использую функцию max, не имеет указанного мной значения, то почему SqlDataReader.HasRows TRUE ?
Он выдает нулевую запись … как мне решить эту проблему??
Заранее спасибо.
Комментарии:
1. Есть строка. Это строка, содержащая столбец с
NULL
. Вот почемуhasRows
возвращаетtrue
. Не путайте ситуацию «строки не возвращаются» с «строка была возвращена, она содержитNULL
s»
Ответ №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