Фильтрация

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

Samuel

Гость
#1
Контекст: фильтр по году, т.е. год может быть больше введенного значения, год может быть равен введенному значению, год может быть меньше введенного значения. Я передаю в процедуру введенное значение и знак, по которому определяется как фильтровать. И аналогичный фильтр по цене. Как это все реализовать в конструкции "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

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

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