Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 WHERE ( IsNull)  [new]
NataKolenko
Member

Откуда:
Сообщений: 76
В FAQ есть пример на where:
and ytd_sales=isnull(@ytd_sales,ytd_sales)
А если в таблице в поле ytd_sales есть значения NULL, то они не поднимаются, если - @ytd_sales - NOT NULL. Как заставить поднимать эти данные????
5 мар 04, 07:39    [564715]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
Aleksey777
Member

Откуда: Novosibirsk
Сообщений: 227
ytd_sales is null
5 мар 04, 07:41    [564717]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
Что-то вроде этого?
(ytd_sales = @ytd_sales) or (ytd_sales is null and @ytd_sales is null)
5 мар 04, 07:49    [564726]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
(ytd_sales=isnull(@ytd_sales,ytd_sales) or ytd_sales is null)

???


для спящего время бодрствования равносильно сну
5 мар 04, 09:05    [564796]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
Igor_Fed
Guest
Я тоже на эти грабли попал, подумал, покумекал и соорудил вот что:
WHERE ISNULL(ytd_sales,0) = ISNULL(@ytd_sales,(ISNULL(ytd_sales,0)))
если ytd_sales ISNULL то оно становится 0 слева и справа от равно...
5 мар 04, 16:40    [566051]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
автор
WHERE ISNULL(ytd_sales,0) = ISNULL(@ytd_sales,(ISNULL(ytd_sales,0)))

в любом!!! случае скан всей таблицы... ето есть плохо, если есть индекс по этому полю

для спящего время бодрствования равносильно сну
5 мар 04, 22:27    [566450]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
Sa
Member

Откуда: Ekaterinburg
Сообщений: 4019
По другому не вижу тогда как? В любом случае ведь scan.
И я тоже так сравниваю
ISNULL(t1.date1,'01.01.1900')=ISNULL(t2.date1,'01.01.1900')

Другой вариант это вообще избегать null в полях, делать not null и default. В моем случае по datetime default будет '01.01.1900'. Вот тогда скана не будет.
5 мар 04, 22:45    [566461]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
(ytd_sales=isnull(@ytd_sales,ytd_sales) or ytd_sales is null)

скана все таки не должно быть :)


для спящего время бодрствования равносильно сну
5 мар 04, 22:47    [566463]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
Sa
Member

Откуда: Ekaterinburg
Сообщений: 4019
По другому не вижу тогда как? В любом случае ведь scan.
И я тоже так сравниваю
ISNULL(t1.date1,'01.01.1900')=ISNULL(t2.date1,'01.01.1900')

Другой вариант это вообще избегать null в полях, делать not null и default. В моем случае по datetime default будет '01.01.1900'. Вот тогда скана не будет.
5 мар 04, 22:52    [566464]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
NataKolenko
Member

Откуда:
Сообщений: 76
А если у меня есть 2 VIEW, в одном просроченные клиенты, в другом активные(данные то лежат в одной таблице), и когда я делаю поиск среди например активных, то сканируются все данные таблицы или VIEW?????
6 мар 04, 08:06    [566548]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
MVM
Member

Откуда:
Сообщений: 271
Только VIEW
6 мар 04, 08:38    [566555]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
и как это происходит если нет индекса... только view???


для спящего время бодрствования равносильно сну
6 мар 04, 23:08    [566764]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
Если скорость так критична, то можно разрулить чере union [all].

where dfff is null
union all
where dfff = @dfff
7 мар 04, 00:56    [566813]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ( IsNull)  [new]
EvAlex
Member

Откуда: Israel
Сообщений: 1001
IsNull(@ytd_sales,0)=(CASE IsNull(@ytd_sales,0)

WHEN 0 THEN IsNull(ytd_sales,0)
ELSE IsNull(ytd_sales,0) END)
7 мар 04, 12:16    [566903]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить