Главная страница
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.014 c
1-28721
werr
2003-01-31 10:19
2003.02.10
как сделать лучше?


1-28837
anatolyk
2003-02-02 20:38
2003.02.10
ActionList


6-28957
hogo
2002-12-11 07:55
2003.02.10
Найти игровые сервера


6-28965
Sergei
2002-12-18 22:36
2003.02.10
Отправка почты


3-28653
Ret
2003-01-23 15:20
2003.02.10
BDE не находит объект.