Страница 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)