Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по T-SQL.   Найти похожие ветки 

 
dimonf   (2003-01-24 11:28) [0]

Я немогу разобраться как всунуть условие в where
далаю:
WHERE
b.exist_base_towar=1 and
t.id_Service=@id_service and
t.exist_towar=1 and
IF (@id_firm <> 0) begin
f.id_firm=@id_firm and
end
IF (@name_towar <> "") begin
b.info_towar like @name_towar and
end
Ругаеться :( Что я не так делаю???
Может данную мысль можно сделать по другому???


 
MOA   (2003-01-24 12:17) [1]

IF нельзя использовать внутри WHERE.
А вот это

IF (@id_firm <> 0) begin
f.id_firm=@id_firm and
end

видимо, имелось в виду

((@id_firm <> 0) AND (f.id_firm=@id_firm) OR (@id_firm = 0) OR (@id_firm IS NULL))

Почитайте также в Book Online про CASE.
Удачи!


 
Y   (2003-01-24 12:18) [2]

Интересно, где ты все это пишешь???


 
VFP   (2003-01-24 13:48) [3]

Конструкцию IF нельзя использовать, но можно использовать IIF
IIF(условие, если условие истино, если условие ложно).


 
MOA   (2003-01-24 13:57) [4]

>можно использовать IIF
Нет, нельзя;( Нет в MSSQL такой конструкции. В MS Analysis Server - есть, а в MS SQL нету.


 
stone   (2003-01-24 14:06) [5]

IIF служит только для работы с многомерными данными (кубами), но не работает в простых запросах


 
neXt   (2003-01-24 14:38) [6]

Для полноты картины, замечу: IF в разделе WHERE, действительно в MSSQL, использовать нельзя, но там можно использовать конструкции CASE-WHEN. Например Ваш запрос может быть представлен в таком виде:
<case>
WHERE
b.exist_base_towar=1 and
t.id_Service=@id_service and
t.exist_towar=1 and
f.id_firm = CASE @id_firm
WHEN 0 THEN NULL
ELSE @id_firm
END
b.info_towar like CASE @name_towar
WHEN "" THEN NULL
ELSE @name_towar
END
</case>
PS Не советаю так делать, по причине неудобочитаемости. Лучше, как предложил MOA.


 
neXt   (2003-01-24 14:39) [7]


WHERE
b.exist_base_towar=1 and
t.id_Service=@id_service and
t.exist_towar=1 and
f.id_firm = CASE @id_firm
WHEN 0 THEN NULL
ELSE @id_firm
END
b.info_towar like CASE @name_towar
WHEN "" THEN NULL
ELSE @name_towar
END



 
ЮЮ   (2003-01-25 03:39) [8]

Ну вы блин даёте.
Where <логическое выражение>. Ну зачем в логическое выражение вставлять всякие IF и CASE, когда для выражения любой сложности достаточно AND, OR и NOT ???

WHERE
b.exist_base_towar=1 AND
t.id_Service=@id_service AND
t.exist_towar=1 AND
((@id_firm = 0) OR (f.id_firm=@id_firm)) AND
((@name_towar = "") OR (b.info_towar like @name_towar))
Так даже читается лучше :-)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
7-29130
aspen
2002-12-06 11:40
2003.02.10
аналог функции portw[] из паскаля?


1-28758
defenseur
2003-02-01 12:17
2003.02.10
Проверка наличия пути на диске


1-28866
BLooDMaN
2003-01-29 23:28
2003.02.10
Как отловить нажатие F2 в собственной программе??


9-28579
arcoant
2002-08-20 14:37
2003.02.10
DelphiX


14-29097
Думкин
2003-01-24 06:47
2003.02.10
Ощущения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский