Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2011, 13:24   #1
Abbath1349
Пользователь
 
Регистрация: 23.10.2010
Сообщений: 25
По умолчанию Помогить сократить T-SQL код

Написал Хранимую процедуру расширенного поиска.Имеет 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
Abbath1349 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как можно сократить код sergio280888 БД в Delphi 0 17.04.2011 17:09
Сократить код shapiro Помощь студентам 0 14.04.2010 17:38
Как сократить код DLL ProgDel Общие вопросы Delphi 3 16.02.2010 21:12
Как можно сократить код jocry Общие вопросы Delphi 2 20.01.2009 08:35