Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как в case с null работать  [new]
Yana
Member

Откуда: Москва
Сообщений: 74
У меня тут вопрос..
@optionName-вх параметр в хр.
@optionName=null по умолчанию.
и с запросе в операторе where такая логика
если @optionName=null то все выбирать, иначе только записи которые сооотносятся с @optionName
типа того должно быть
AND ot.[optionName] = case @optionName when is null then is not null else @optionName

но в сиквеле такого нет.. как с null работать БЛИН?
28 окт 03, 13:03    [395891]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
 case when @optionName is null then ... else ... 
28 окт 03, 13:05    [395895]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
FAQ
28 окт 03, 13:05    [395896]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
WHERE (ot.optionname = @optionname) or (@optionname IS NULL)
28 окт 03, 13:05    [395897]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
Yana
Member

Откуда: Москва
Сообщений: 74
ни то ни другое, читайте задачу..
28 окт 03, 13:06    [395904]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
ни то ни другое, читайте задачу..

А FAQ внимательно почитать?
28 окт 03, 13:07    [395907]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
Лучше пишите нормально...:-)

ot.[optionName] = case when @optionName is null then ot.[optionName] else @optionName end


Но, мне кажется, лучше переписать запрос...
28 окт 03, 13:10    [395914]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
Adony
Member

Откуда: Москва
Сообщений: 1083
Ленимся читать факи...
28 окт 03, 13:11    [395915]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ага! А потом говорят, что мы тут дружно вместе ругаемся
28 окт 03, 13:12    [395918]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
Yana
Member

Откуда: Москва
Сообщений: 74
и пример, что в faq тоже не подходит так как я не могу написать isNull(@qqq,"")
логика этого не предусматривает..

по задаче если

if @optionName=null
then 'AND ot.[optionName] =is not null'
else AND ot.[optionName] = @optionName
(только динамик сиквел мне не нужны)

то есть если @optionName=null то выбираем все значения ( то етсь можем написать @optionName is not null так как эти данные по определению not null)..
иначе накладываем условия ot.[optionName] = @optionName..

но в case не предусмотрено работать c null..
28 окт 03, 13:12    [395921]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
Yana
Member

Откуда: Москва
Сообщений: 74
to berg
Неплохой вариант спасибо, щас попробую
28 окт 03, 13:14    [395928]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Да что ж такое?! А если так написать

...

AND ot.[optionName] = ISNULL(@optionName , ot.[optionName])


Это ж оно и есть, что надо!!! И в факе описано!
28 окт 03, 13:14    [395931]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
BootMaker
Member

Откуда: С-Петербург
Сообщений: 902
where ot.[optionName] =@optionName or ot.[optionName] is null
28 окт 03, 13:14    [395932]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
Yana
Member

Откуда: Москва
Сообщений: 74
to BootMaker
это решение по определению работать не будет...
так как optionName not null по определению..
berg прав..., этот способ самый луший..
28 окт 03, 13:17    [395937]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
если @optionName=null то все выбирать, иначе только записи которые сооотносятся с @optionName

и

if @optionName=null
then 'AND ot.[optionName] =is not null'
else AND ot.[optionName] = @optionName


Что-то у вас условия задачи по ходу меняются?! Что ж надо то?

Если первое, то так, наверное, будет правильно

WHERE ot.optionName = COALESCE(@optionName, otoptionname)
28 окт 03, 13:17    [395939]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
> но в case не предусмотрено работать c null..

Что сие вообще означает?

Одно из 2-х:
1) Вы даже не попробовали то, что вам предложили, решив, что это вам не подходит;
2) Сами не знаете чего хотите...:-)

Напишите хоть через динамик и сюда киньте...Возможно, тогда будет понятно какой результат требуется...
28 окт 03, 13:18    [395941]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Кто-нибудь, объясните чем

ot.[optionName] = case when @optionName is null then ot.[optionName] else @optionName end

по результату отличается от

ot.[optionName] = ISNULL(@optionName, ot.[optionName])

???
28 окт 03, 13:22    [395947]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
2tpg:
Да, она похоже их и не проверяла...
А я чисто CASE отмазал...Что за наезды на него? "Не умеет с NULL работать..."
:-)
28 окт 03, 13:24    [395950]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
BootMaker
Member

Откуда: С-Петербург
Сообщений: 902
сорри, конечно же я опечатался. правильно:
were ot.[optionName] =@optionName or @optionName is null
28 окт 03, 13:26    [395954]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
2 Berg

Больше деушкам не отвечаю! (раз факи не читают)
28 окт 03, 13:28    [395956]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
Yana
Member

Откуда: Москва
Сообщений: 74
пардон
проворонела по невнимательности вариант с
ot.optionName=ISNULL(@optionName, ot.[optionName])...
и этот ot.optionName = COALESCE(@optionName, otoptionname) тоже красив..
Спасибо..
все работает..
28 окт 03, 13:30    [395964]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
bushmen
Member

Откуда: г. Москва
Сообщений: 828
2 BootMaker
Опять ты опечатался.
2 tpg:
Опять за старое?! (FAQ)
28 окт 03, 13:31    [395972]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
А если бы вы сначала проверяли ответы, а потом определяли их правильность, все заработало бы гораздо быстрее.
28 окт 03, 13:31    [395976]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
Yana
Member

Откуда: Москва
Сообщений: 74
каюсь каюсь..
будем исправляться
:-)
28 окт 03, 13:35    [395982]     Ответить | Цитировать Сообщить модератору
 Re: Как в case с null работать  [new]
BootMaker
Member

Откуда: С-Петербург
Сообщений: 902
2 bushmen
Неправда ваша! Я не опечатался! Все работает! У меня свидетели есть!
28 окт 03, 14:18    [396121]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить