Главная страница
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.48 MB
Время: 0.028 c
9-28573
Lamer86
2002-07-04 12:21
2003.02.10
Можно ли использовать формат jpg в DXImageList


1-28747
ShadowX
2003-02-01 00:42
2003.02.10
из Clipboard a в HTML


9-28581
FreeMen
2002-08-26 10:05
2003.02.10
Как включит HARDWARE OpenGL?


8-28937
Juran
2002-10-27 11:57
2003.02.10
как загрузить в Image другие форматы кроме стандартных


1-28907
KoHe4Ho }|{e 6ot
2003-01-30 19:01
2003.02.10
Apach+Delphi