powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите с процедурой
2 сообщений из 2, страница 1 из 1
Помогите с процедурой
    #32519430
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу процедуру для MS SQL сервер....

Проблема в следующем: не понимаю почему не дает использовать if в where. Смысл в том, чтобы если значение не определено, то входящей переменной назначается значение "-1" и при проверке оно не учитывалось...

CREATE PROCEDURE search_area_price
@areamin real,
@areamax real,
@pricemin int,
@pricemax int,
@okrug varchar,
@metro varchar,
@street varchar,
@type varchar,
@m_m int,
@phone varchar,
@internet binary,
@data smalldatetime

AS
SELECT office.id AS id,
office.building_id AS building_id,
office.sqmeters AS area, office.price AS price,
office.oper_expenses AS oper,
office.parking_num AS parking,
voc_street.name AS street,
building.num AS number,
voc_metro.name AS metro,
voc_okrug.name AS okrug,
voc_building_type.name AS b_type,
voc_phone.name AS phone,
owner.name AS owner,
owner_contact.name AS contact,
owner_contact.phone AS phone,
office.contract_num AS contract,
broker.name AS broker

FROM broker INNER JOIN
owner INNER JOIN
voc_phone INNER JOIN
link_office_phone INNER JOIN
voc_metro INNER JOIN
voc_okrug INNER JOIN
voc_building_type INNER JOIN

voc_street INNER JOIN building ON voc_street.id = building.street_id
INNER JOIN office ON building.id = office.building_id
ON voc_building_type.id = building.building_type_id
ON voc_okrug.id = building.okrug_id
ON voc_metro.id = building.metro_id
ON link_office_phone.office_id=office.id
ON voc_phone.id=link_office_phone.phone_id
ON owner.id = office.owner_id
ON broker.id = office.broker_id

INNER JOIN
(SELECT office_id, MIN(owner_contact_id) AS contact_min_id
FROM link_office_owner_contact
GROUP BY office_id)
link ON office.id = link.office_id
INNER JOIN owner_contact ON link.contact_min_id = owner_contact.id
WHERE (office.sqmeters BETWEEN @areamin AND @areamax) AND
(office.price BETWEEN @pricemin AND @pricemax) AND
(IF @metro <> -1 ( voc_metro.name = @metro)) AND (voc_okrug.name LIKE @okrug) AND
NOT (office.date_active = NULL)
GO
...
Рейтинг: 0 / 0
Помогите с процедурой
    #32519437
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот вопрос надо задавать в форуме Microsoft SQL Server .
Вместо IF надо использовать CASE, подробности в Books Online
По выражению
Код: plaintext
1.
(IF @metro <> - 1  ( voc_metro.name = @metro)) AND
трудно понять смысл условия, voc_metro.name типа int ?
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите с процедурой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]