Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 IsNull возвращает NULL вместо числа  [new]
дмз2
Guest
Делаю примерно так

declare @HW int, @Node int
...
select @HW = IsNull(Point_ID, 0) FROM [Point] WHERE [Node_ID] = @Node AND SystemType_ID=3

SELECT @HW

при отсутствии записей результат NULL, а я почему-то думал что должен получить 0 (при наличии подходящих записей все ОК)
25 фев 16, 09:13    [18860505]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
declare @HW int, @Node int
...
SELECT @HW = ISNULL((select Point_ID FROM [Point] WHERE [Node_ID] = @Node AND SystemType_ID=3), 0)

SELECT @HW
25 фев 16, 09:25    [18860538]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
дмз2
Guest
Спасибо
сам сделал пока так

select @HW = IsNull(Max(Point_ID), 0) FROM [Point] WHERE [Node_ID] = @Node AND SystemType_ID=3

Насколько это корректно?
25 фев 16, 09:37    [18860592]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
дмз2
Спасибо
сам сделал пока так

select @HW = IsNull(Max(Point_ID), 0) FROM [Point] WHERE [Node_ID] = @Node AND SystemType_ID=3


Насколько это корректно?
Вообще некорректно.
Ибо @Node IS NULL (неинициализировна).
Читайте про сравнение со значением NULL.

Если переменной присваивать значение SELECTом, то если SELECT не возвращает ни одной записи,
то переменная своё предыдущее значение (в данном случае NULL) не меняет.
25 фев 16, 09:47    [18860623]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
дмз2
Спасибо
сам сделал пока так

select @HW = IsNull(Max(Point_ID), 0) FROM [Point] WHERE [Node_ID] = @Node AND SystemType_ID=3

Насколько это корректно?

Некорректно, так как в случае если запрос не вернет ни одной записи, то получите NULL!
Jovanny дал вам правильный вариант.
Либо сделайте так
declare @HW int, @Node int
...
select @HW = Point_ID FROM [Point] WHERE [Node_ID] = @Node AND SystemType_ID=3

SELECT ISNULL(@HW,0)
25 фев 16, 09:48    [18860625]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
SQL2008
дмз2
Спасибо
сам сделал пока так

select @HW = IsNull(Max(Point_ID), 0) FROM [Point] WHERE [Node_ID] = @Node AND SystemType_ID=3


Насколько это корректно?

Некорректно, так как в случае если запрос не вернет ни одной записи, то получите NULL!
Jovanny дал вам правильный вариант.
Либо сделайте так
declare @HW int, @Node int
...
select @HW = Point_ID FROM [Point] WHERE [Node_ID] = @Node AND SystemType_ID=3

SELECT ISNULL(@HW,0)
И сколько же записей вернёт SELECT по-вашему?
25 фев 16, 09:50    [18860635]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
дмз2,

declare @HW int, @Node int
...
set @HW = IsNull((select top 1 Point_ID FROM [Point] WHERE [Node_ID] = @Node AND SystemType_ID=3), 0)

SELECT @HW
25 фев 16, 11:19    [18861091]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Какие ценные советы, я угораю просто.
Никто не советует просто проинициализировать объявленные переменные, однако...
25 фев 16, 11:23    [18861119]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
автор
а я почему-то думал что должен получить 0

С чего бы так, если не выбрано ни одного значения. Что было, то и осталось.
25 фев 16, 11:25    [18861140]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
iap
SQL2008
пропущено...

Некорректно, так как в случае если запрос не вернет ни одной записи, то получите NULL!
Jovanny дал вам правильный вариант.
Либо сделайте так
declare @HW int, @Node int
...
select @HW = Point_ID FROM [Point] WHERE [Node_ID] = @Node AND SystemType_ID=3

SELECT ISNULL(@HW,0)
И сколько же записей вернёт SELECT по-вашему?

А причем тут количество строк, язвительный Вы наш!

Выполните это и увидите
DECLARE @N int;
SELECT @N  = [number]  FROM [master].[dbo].[spt_values] where [number]<>[number]
SELECT ISNULL(@N,0)
25 фев 16, 13:42    [18862071]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Специально для зануд:
DECLARE @N int;
SELECT @N  = [number]  FROM [master].[dbo].[spt_values] where [number]<>[number]
SELECT @@ROWCOUNT
25 фев 16, 13:45    [18862086]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
Glory
Member

Откуда:
Сообщений: 104751
SQL2008
Специально для зануд:

И вам тоже

DECLARE @N int;
SELECT @N  = [number]  FROM [master].[dbo].[spt_values] where [number]<>[number]
SELECT @N, @@ROWCOUNT

SELECT @N  = MAX([number])  FROM [master].[dbo].[spt_values] where [number]<>[number]
SELECT @N, @@ROWCOUNT
25 фев 16, 13:49    [18862116]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Glory, нечестно!
Агрегатные функции не в счёт!
25 фев 16, 14:16    [18862294]     Ответить | Цитировать Сообщить модератору
 Re: IsNull возвращает NULL вместо числа  [new]
дмз2
Guest
Всем спасибо, можно заканчивать.
Оказалось что эти значения в переменных не нужны - их проще сразу в таблицу и далее джойнами, а на нет и выборки нет.
25 фев 16, 14:22    [18862329]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить