• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Фильтрация

  • Автор темы Автор темы 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]
 
Если БД поддерживает динамический SQL, то можно, согласно входящим значениям, сгенерировать строку с запросом и выполнить его. Или же просто написать три запроса с разными условиями WHERE :)

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы