Хочу выяснить это глюк MS или так должно быть
Допустим есть запрос
DECLARE @qqq BIGINT
SELECT @qqq=ISNULL(Field,-1) FROM Table WHERE (bla, bla, bla)
После исполнения запроса получаю @qqq = NULL , если не найдено ни одной записи удовлетворяющей условие. Почему? По логике должен же получить @qqq = -1. Или я чего то не понимаю?
Но если перед запросом поставить SET @qqq=-1, то все нормально.
Hello, Oxy!
You wrote on Fri, 22 Aug 2003 10:21:42 GMT:
ИМХО,
@qqq=ISNULL(Field,-1)
вообще не исполняется, если условие не удовлетворяется ни для одной записи.
With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Здравствуйте, Oxy, Вы писали:
Oxy>Хочу выяснить это глюк MS или так должно быть
Так и должно быть.
Oxy>После исполнения запроса получаю @qqq = NULL , если не найдено ни одной записи удовлетворяющей условие. Почему? По логике должен же получить @qqq = -1. Или я чего то не понимаю?
Как уже сказал Алексей, до @qqq=ISNULL(Field,-1) при отсутствии записей дело вообще не доходит.
Попробуй например так:
DECLARE @qqq BIGINT
SET @qqq= ISNULL((SELECT Field FROM Table WHERE (bla, bla, bla)), -1)
Здравствуйте, Oxy, Вы писали:
Oxy>Хочу выяснить это глюк MS или так должно быть
Oxy>Допустим есть запрос
Oxy>Oxy>DECLARE @qqq BIGINT
Oxy>SELECT @qqq=ISNULL(Field,-1) FROM Table WHERE (bla, bla, bla)
Oxy>
Oxy>После исполнения запроса получаю @qqq = NULL , если не найдено ни одной записи удовлетворяющей условие. Почему? По логике должен же получить @qqq = -1. Или я чего то не понимаю?
Oxy>Но если перед запросом поставить SET @qqq=-1, то все нормально.
Все дело в том, что возвращается
пустой рекордсет. А если так, то функция ISNULL просто не получает никакого аргумента, вот и все. Поэтому @qqq не меняется. Если Вы поставите перед запросом SET @qqq=-2, то и после запроса останется это же значение.
Jeka