Select ... into ...: null или не null
Select ... into ...: null или не null
Не знаю, бага ли это или нет, но ничего по данной проблеме в инете не нашел.
Итак, вроде элементарная логика:
declare variable Var int;
Var = 0;
select SomeField from Table
where Table.Field = <value>
into :Var;
Так вот, если селект выберет хоть одну строку, то в Var попадет значение поля SomeField, НО если селект ничего не выберет, то Var так и останется равен 0, хотя по логике должен быть обNULL`ен!
В чем проблема или я где-то урок в консерватории пропустил ?
Итак, вроде элементарная логика:
declare variable Var int;
Var = 0;
select SomeField from Table
where Table.Field = <value>
into :Var;
Так вот, если селект выберет хоть одну строку, то в Var попадет значение поля SomeField, НО если селект ничего не выберет, то Var так и останется равен 0, хотя по логике должен быть обNULL`ен!
В чем проблема или я где-то урок в консерватории пропустил ?
Re: Select ... into ...: null или не null
По какой логике ?ARM писал(а):НО если селект ничего не выберет, то Var так и останется равен 0, хотя по логике должен быть обNULL`ен!
ПропустилARM писал(а):В чем проблема или я где-то урок в консерватории пропустил ?
Re: Select ... into ...: null или не null
Поведение логичное: select не выбрал НИ ОДНОЙ записи, поэтому переменная не изменилась.ARM писал(а):Не знаю, бага ли это или нет, но ничего по данной проблеме в инете не нашел.
Итак, вроде элементарная логика:
declare variable Var int;
Var = 0;
select SomeField from Table
where Table.Field = <value>
into :Var;
Так вот, если селект выберет хоть одну строку, то в Var попадет значение поля SomeField, НО если селект ничего не выберет, то Var так и останется равен 0, хотя по логике должен быть обNULL`ен!
В чем проблема или я где-то урок в консерватории пропустил ?
Если вы попробуете тоже самое в виде
i = 0;
for select ...... into :Var do
begin
i = i + 1;
end
то при отсутствии выбранных селектом записей
1) Var не изменится
2) блок begin ... end не будет выполнен ни разу (i останется равной 0)
Конечно нетARM писал(а):да, мой пример дал бы результат nullAL-GALI писал(а):там иначе?ARM писал(а):Блин, сказывается упор в последнее время на Мелкософт
Сенкс.
Код: Выделить всё
declare @i int
set @i = 10
select top 1 @i = id from sysobjects
where 0=1
select @i
-----------
10
(1 row(s) affected)