Проблемы с ISNULL в T-SQL
От: Oxy  
Дата: 22.08.03 10:21
Оценка:
Хочу выяснить это глюк MS или так должно быть
Допустим есть запрос
DECLARE @qqq BIGINT
SELECT @qqq=ISNULL(Field,-1) FROM Table WHERE (bla, bla, bla)

После исполнения запроса получаю @qqq = NULL , если не найдено ни одной записи удовлетворяющей условие. Почему? По логике должен же получить @qqq = -1. Или я чего то не понимаю?
Но если перед запросом поставить SET @qqq=-1, то все нормально.
Re: Проблемы с ISNULL в T-SQL
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 22.08.03 11:33
Оценка: 1 (1) +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
Re: Проблемы с ISNULL в T-SQL
От: Merle Австрия http://rsdn.ru
Дата: 22.08.03 11:41
Оценка:
Здравствуйте, 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)
Мы уже победили, просто это еще не так заметно...
Re: Проблемы с ISNULL в T-SQL
От: nov  
Дата: 22.08.03 12:00
Оценка:
Здравствуйте, 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
Jeka
Re[2]: Проблемы с ISNULL в T-SQL
От: Oxy  
Дата: 22.08.03 12:26
Оценка:
nov>Все дело в том, что возвращается пустой рекордсет. А если так, то функция ISNULL просто не получает никакого аргумента, вот и все. Поэтому @qqq не меняется. Если Вы поставите перед запросом SET @qqq=-2, то и после запроса останется это же значение.
nov>Jeka

Усе понял
Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.