Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обработка параметра в процедуре?  [new]
BOBAHbI4
Member

Откуда: Крым, Севастополь.
Сообщений: 74
Задача такова:
Процедура имеет несколько параметров.
@ValueMin MONEY, --Минимальное значение при условии отбора
@ValueMax MONEY, --максимальное значение при условии отбора, но если =0 то выбирать все
--если эти параметры равны нулю то выбирать все
@PeriodStart DATE, --начальная дата периода
@PeriodFinish Date  -- конечная дата периода.
...

Далее собственно выборка
SELECT чтото1, чтото2, ... чтотоN
FOM ... --понятно
-- всякие JOINы
WHERE чтото.Date>@PeriodStart AND чтото.Date<@PeriodFinish
AND 
... 

А вот далее проблема
если @ValueMax=0 то дальше условий не надо, остальное забираем все
иначе
чтото.value>@ValueMin AND чтото.value<=ValueMax

CASE вроде вставить не получится, если через него не продублировать всю процедуру.
Не знаю в какую сторону копать.
24 дек 13, 15:13    [15340126]     Ответить | Цитировать Сообщить модератору
 Re: Обработка параметра в процедуре?  [new]
sdet
Member

Откуда:
Сообщений: 463
BOBAHbI4,
Добавьте OR @ValueMax=0
24 дек 13, 15:17    [15340153]     Ответить | Цитировать Сообщить модератору
 Re: Обработка параметра в процедуре?  [new]
BOBAHbI4
Member

Откуда: Крым, Севастополь.
Сообщений: 74
Сделал немного не так
В самом начале процедуры сделал назначение
IF @MaxValue=0
BEGIN 
@MaxValue=(SELECT MAX(чтото.value))
END
...

И диапазоны прекрасно заработали.
Поскольку процедура собирает статистику, то скорость не критична и работать она будет не часто.
24 дек 13, 17:49    [15341387]     Ответить | Цитировать Сообщить модератору
 Re: Обработка параметра в процедуре?  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2397
BOBAHbI4,

IF @MaxValue=0
BEGIN 

SELECT чтото1, чтото2, ... чтотоN
FOM ... --понятно
-- всякие JOINы
WHERE чтото.Date>@PeriodStart AND чтото.Date<@PeriodFinish

END

else
BEGIN 

SELECT чтото1, чтото2, ... чтотоN
FOM ... --понятно
-- всякие JOINы
WHERE чтото.Date>@PeriodStart AND чтото.Date<@PeriodFinish
AND "другие условия"
... 
END
25 дек 13, 09:32    [15343580]     Ответить | Цитировать Сообщить модератору
 Re: Обработка параметра в процедуре?  [new]
BOBAHbI4
Member

Откуда: Крым, Севастополь.
Сообщений: 74
StarikNavy,

Этот метод обдумывался изначально. Но в задаче еще стоит вычислить общую сумму.
Ее я вычисляю так:
Declare @Weight MONEY
SELECT @Weight=SUM(чтото.Amount*чтото.Cost) 
FROM чтото 
INNER JOIN --(необходимое объединение для дальнейшей фильтрации)
...
WHERE ... --(Понятный жесткие условия на некоторые значения)
--Одно из условий или меньше @ValueMax или если @ValueMax=0 этого условия просто нет.

Если сделать как вы предлагаете, то получится 4ре запроса, хотя реально будет всего 2.
Но процедура выйдет немного громоздкой. А громоздкой её пока делать не хочется, так как это пока примерный набросок, и задание может изменится.
Хотя пока писал пост подумал что попробую и этот метод и потом сравню результат.
25 дек 13, 12:40    [15344639]     Ответить | Цитировать Сообщить модератору
 Re: Обработка параметра в процедуре?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34687
BOBAHbI4
Задача такова:
Процедура имеет несколько параметров.


[/src]
А вот далее проблема
если @ValueMax=0 то дальше условий не надо, остальное забираем все
иначе
чтото.value>@ValueMin AND чтото.value<=ValueMax

CASE вроде вставить не получится, если через него не продублировать всю процедуру.
Не знаю в какую сторону копать.


Двигай в сторону таких операторов, как IF... ELSE , IF ELSE.
25 дек 13, 13:24    [15345004]     Ответить | Цитировать Сообщить модератору
 Re: Обработка параметра в процедуре?  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2397
BOBAHbI4

Но процедура выйдет немного громоздкой. .


т.е. лишний код вас напрягает, а лишнее время вычисления нет?
25 дек 13, 13:29    [15345060]     Ответить | Цитировать Сообщить модератору
 Re: Обработка параметра в процедуре?  [new]
BOBAHbI4
Member

Откуда: Крым, Севастополь.
Сообщений: 74
Всем спасибо, IF ELSE победил со значительным перевесом в производительности.
25 дек 13, 17:54    [15346783]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить