Страница 1 из 1
Select ... into ...: null или не null
Добавлено: 04 янв 2007, 12:37
ARM
Не знаю, бага ли это или нет, но ничего по данной проблеме в инете не нашел.
Итак, вроде элементарная логика:
declare variable Var int;
Var = 0;
select SomeField from Table
where Table.Field = <value>
into :Var;
Так вот, если селект выберет хоть одну строку, то в Var попадет значение поля SomeField, НО если селект ничего не выберет, то Var так и останется равен 0, хотя по логике должен быть обNULL`ен!
В чем проблема или я где-то урок в консерватории пропустил ?
Добавлено: 04 янв 2007, 13:26
Merlin
Пропустил.
A:=5;
While Not F.Eof Do
Read(F,A);
чему должно быть равно А в случае пустого файла?
Re: Select ... into ...: null или не null
Добавлено: 04 янв 2007, 13:39
hvlad
ARM писал(а):НО если селект ничего не выберет, то Var так и останется равен 0, хотя по логике должен быть обNULL`ен!
По какой логике ?
ARM писал(а):В чем проблема или я где-то урок в консерватории пропустил ?
Пропустил
Re: Select ... into ...: null или не null
Добавлено: 04 янв 2007, 13:40
AL-GALI
ARM писал(а):Не знаю, бага ли это или нет, но ничего по данной проблеме в инете не нашел.
Итак, вроде элементарная логика:
declare variable Var int;
Var = 0;
select SomeField from Table
where Table.Field = <value>
into :Var;
Так вот, если селект выберет хоть одну строку, то в Var попадет значение поля SomeField, НО если селект ничего не выберет, то Var так и останется равен 0, хотя по логике должен быть обNULL`ен!
В чем проблема или я где-то урок в консерватории пропустил ?
Поведение логичное: select не выбрал НИ ОДНОЙ записи, поэтому переменная не изменилась.
Если вы попробуете тоже самое в виде
i = 0;
for select ...... into :Var do
begin
i = i + 1;
end
то при отсутствии выбранных селектом записей
1) Var не изменится
2) блок begin ... end не будет выполнен ни разу (i останется равной 0)
Добавлено: 04 янв 2007, 13:51
ARM
Блин, сказывается упор в последнее время на Мелкософт
Сенкс.
Добавлено: 04 янв 2007, 15:25
AL-GALI
ARM писал(а):Блин, сказывается упор в последнее время на Мелкософт
Сенкс.
там иначе?
Добавлено: 04 янв 2007, 19:34
ARM
AL-GALI писал(а):ARM писал(а):Блин, сказывается упор в последнее время на Мелкософт
Сенкс.
там иначе?
да, мой пример дал бы результат null. Да и удобнее это! Т.к. в ФБ мне придется сначало проверить, а есть ли собственное данные по моему условию и если есть, только тогда их читать!
Добавлено: 04 янв 2007, 20:21
hvlad
ARM писал(а):AL-GALI писал(а):ARM писал(а):Блин, сказывается упор в последнее время на Мелкософт
Сенкс.
там иначе?
да, мой пример дал бы результат null
Конечно нет
Код: Выделить всё
declare @i int
set @i = 10
select top 1 @i = id from sysobjects
where 0=1
select @i
-----------
10
(1 row(s) affected)