powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отсеивание по условию
5 сообщений из 5, страница 1 из 1
Отсеивание по условию
    #32005905
Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, отцы!

В общем, есть у меня проблема, как решить - пока не додумался. Суть: есть форма с критериями поиска в базе. Практически все поля необязательны (можно выбрать опцию "неважно"). Что я делаю в процедуре:

допустим, пользователь выбрал в поле "Страна" - "неважно" (значение "0"). В процедуре я отбираю во временную таблицу все страны, и, если критерий выборки по стране не равен "ноль" ( то есть выбрана конкретная страна), удаляю из временной таблицы ненужные страны. Сильно подозреваю, что этот путь не самый лучший, но вот как сделать так, чтобы сразу выбирать нужные записи? Что-то типа:

SELECT CountryName FROM CountryList WHERE LangID=@LangID AND (IF(@CountryID<>0) CountryID=@CountryID )

где
@LangID - идентификатор языка, на котором запрашивают список, а CountryID - тот самый опциональный параметр...

То есть сравнение на больше(CountryID>@CountryID) не пойдет, поскольку может быть выбрана конкретная страна (CountryID=@CountryID)...

К сожалению, вышеприведенная конструкция запроса по сути абсурдна... А вот как все-таки? Ума не хватает у меня... И знания тонкостей T-SQL... Прошу поделиться опытом...
...
Рейтинг: 0 / 0
Отсеивание по условию
    #32005908
Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WHERE LangID=@LangID
AND CountryID = case
when @CountryID =0 then CountryID
when @CountryID <>0 then @CountryID
Хотя может быть отцы предложат что-нибудь более изящное.
...
Рейтинг: 0 / 0
Отсеивание по условию
    #32005913
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, если условие не определено, то оно NULL, соответственно:
WHERE LangID=ISNULL(@LangID,LangId) AND CountryID=ISNULL(@CountryID,CountryId)
...
Рейтинг: 0 / 0
Отсеивание по условию
    #32005924
Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Вариант с case работает как раз так, как нужно! Но в связи с этим один вопрос: а насколько расточительна в плане ресурсов сервера проверка поля с самим собой (CountryID=CountryID)? И работает ли быстрей инструкция DELETE, удаляющая ненужные строки из временной таблицы? Но вопрос чисто умозрительный, поскольку все работает отлично и с использованием case...
...
Рейтинг: 0 / 0
Отсеивание по условию
    #32005925
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пишу обычно примерно так:
WHERE (@LangID=LangId or @LangID=0) AND (CountryID=@CountryID or @CountryID=0)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отсеивание по условию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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