Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.10;
Скачать: CL | DM;

Вниз

Вопрос по 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;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.01 c
3-28602
alex_bredin
2003-01-22 17:35
2003.02.10
столбцы DBGrid


14-29019
lamokop
2003-01-23 22:01
2003.02.10
Delphi Translit :))


14-29060
Anton
2003-01-24 17:33
2003.02.10
Нужна помощь


1-28803
SaperXL
2003-01-31 04:01
2003.02.10
Активация - деактивация формы


1-28771
Zhker
2003-01-26 20:05
2003.02.10
Tray





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский