Написал Хранимую процедуру расширенного поиска.Имеет 8 вариантов (в зависимости от входных параметров). Код слишком большой подскажите как можно сократить?)
Код:
ALTER PROCEDURE [dbo].[AdvancedSearch]
@Min_Price money,
@Max_price money,
@Product_name nvarchar(35),
@Producer nvarchar(25),
@Category nvarchar(25)
AS
DECLARE @MAXIMAL_PRICE money
DECLARE @MINIMAL_PRICE money
SET @MAXIMAL_PRICE=(SELECT MAX([Цена(Руб.)]) FROM [Каталог Товаров])
SET @MINIMAL_PRICE=(SELECT MIN([Цена(Руб.)]) FROM [Каталог Товаров])
IF(@Min_Price IS NULL )
SET @Min_Price=@MINIMAL_PRICE
IF(@Max_price IS NULL)
SET @Max_price=@MAXIMAL_PRICE
IF(@Product_name IS NULL AND @Producer IS NULL AND @Category IS NULL)
BEGIN
SELECT [Наименование Товара],[Цена(Руб.)]
FROM [Каталог Товаров]
WHERE [Цена(Руб.)] BETWEEN @Min_Price AND @Max_price
END
ELSE IF(@Product_name IS NULL AND @Producer IS NULL AND @Category IS NOT NULL)
BEGIN
SELECT [Наименование Товара],[Сертификат Качества],Производитель,[Цена(Руб.)]
FROM [Каталог Товаров]
WHERE [Цена(Руб.)] BETWEEN @Min_Price AND @Max_price AND Категория=@Category
END
ELSE IF(@Product_name IS NULL AND @Producer IS NOT NULL AND @Category IS NULL)
BEGIN
SELECT [Наименование Товара],[Сертификат Качества],Производитель,[Цена(Руб.)]
FROM [Каталог Товаров]
JOIN
Поставщики
ON [Каталог Товаров].Поставщик=Поставщики.[Код Поставщика]
WHERE [Цена(Руб.)] BETWEEN @Min_Price AND @Max_price AND [Имя Поставщика]=@Producer
END
ELSE IF(@Product_name IS NULL AND @Producer IS NOT NULL AND @Category IS NOT NULL)
BEGIN
SELECT [Наименование Товара],[Сертификат Качества],Производитель,[Цена(Руб.)]
FROM [Каталог Товаров]
JOIN
Поставщики
ON [Каталог Товаров].Поставщик=Поставщики.[Код Поставщика]
WHERE [Цена(Руб.)] BETWEEN @Min_Price AND @Max_price
AND [Имя Поставщика]=@Producer AND Категория=@Category
END
ELSE IF(@Product_name IS NOT NULL AND @Producer IS NULL AND @Category IS NULL)
BEGIN
SELECT [Наименование Товара],[Сертификат Качества],Производитель,[Цена(Руб.)]
FROM [Каталог Товаров]
WHERE [Цена(Руб.)] BETWEEN @Min_Price AND @Max_price
AND [Наименование Товара] Like '%'+@Product_name+'%'
END
ELSE IF(@Product_name IS NOT NULL AND @Producer IS NULL AND @Category IS NOT NULL)
BEGIN
SELECT [Наименование Товара],[Сертификат Качества],Производитель,[Цена(Руб.)]
FROM [Каталог Товаров]
WHERE [Цена(Руб.)] BETWEEN @Min_Price AND @Max_price
AND [Наименование Товара] Like '%'+@Product_name+'%' AND Категория=@Category
END
ELSE IF(@Product_name IS NOT NULL AND @Producer IS NOT NULL AND @Category IS NULL)
BEGIN
SELECT [Наименование Товара],[Сертификат Качества],Производитель,[Цена(Руб.)]
FROM [Каталог Товаров]
JOIN
Поставщики
ON [Каталог Товаров].Поставщик=Поставщики.[Код Поставщика]
WHERE [Цена(Руб.)] BETWEEN @Min_Price AND @Max_price
AND [Имя Поставщика]=@Producer AND [Наименование Товара] Like '%'+@Product_name+'%'
END
ELSE IF(@Product_name IS NOT NULL AND @Producer IS NOT NULL AND @Category IS NOT NULL)
BEGIN
SELECT [Наименование Товара],[Сертификат Качества],Производитель,[Цена(Руб.)]
FROM [Каталог Товаров]
JOIN
Поставщики
ON [Каталог Товаров].Поставщик=Поставщики.[Код Поставщика]
WHERE [Цена(Руб.)] BETWEEN @Min_Price AND @Max_price AND Категория=@Category
AND [Имя Поставщика]=@Producer AND [Наименование Товара] Like '%'+@Product_name+'%'
END