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
Хочу выяснить это глюк MS или так должно быть
Допустим есть запрос
DECLARE @qqq BIGINT
SELECT @qqq=ISNULL(Field,-1) FROM Table WHERE (bla, bla, bla)
После исполнения запроса получаю @qqq = NULL , если не найдено ни одной записи удовлетворяющей условие. Почему? По логике должен же получить @qqq = -1. Или я чего то не понимаю?
Но если перед запросом поставить SET @qqq=-1, то все нормально.
Здравствуйте, 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