• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Фильтрация

  • Автор темы Samuel
  • Дата начала
S

Samuel

Контекст: фильтр по году, т.е. год может быть больше введенного значения, год может быть равен введенному значению, год может быть меньше введенного значения. Я передаю в процедуру введенное значение и знак, по которому определяется как фильтровать. И аналогичный фильтр по цене. Как это все реализовать в конструкции "WHERE"? Через оператор CASE можно ?
Кусочек моего кода:
[sql]CREATE PROCEDURE [dbo].[xp_GetAutos]
(
@YearFilter INT = NULL,
@PriceFilter INT = NULL,
@SignFilter VARCHAR (1) = NULL
)
AS BEGIN SELECT a.Name, a.Year, a.Price
FROM Auto AS a
WHERE CASE @SignFilter
WHEN '=' THEN (a.Year = @YearFilter OR a.Price = @PriceFilter)
WHEN '>' THEN (a.Year > @YearFilter OR a.Price > @PriceFilter)
WHEN '<' THEN (a.Year < @YearFilter OR a.Price < @PriceFilter)
END
END[/sql]
 
A

Aleksey

Если БД поддерживает динамический SQL, то можно, согласно входящим значениям, сгенерировать строку с запросом и выполнить его. Или же просто написать три запроса с разными условиями WHERE :)

Вдогонку еще скажу, что в процедуре SELECT должен иметь форму SELECT ... INTO.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!