Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: -0.99 c
1-28721
werr
2003-01-31 10:19
2003.02.10
как сделать лучше?


14-29085
Феликс
2003-01-24 01:44
2003.02.10
Кому нравятся модели?


1-28787
Chizh
2003-02-01 13:52
2003.02.10
Перетаскивание файлов на CheckListBox


1-28819
sancho
2003-02-02 11:37
2003.02.10
Вопросик имеется... про Tfilelistbox


3-28656
CASU
2003-01-22 11:16
2003.02.10
Как отобразить процесс передачи данных на сервер?




   Наверх