2016-12-31 6 views
5

У меня проблема с моим кодом: P, очевидно, правильно ?! В любом случае ... вот что это ... Я хочу иметь STORED PROC, который принимает 3 аргумента (@cat, @cutPrice, @option) и возвращает несколько результатов, которые имеют тип, похожий на @cat, и цену, которая равна < или> @cutPrice в зависимости от ключевого слова @option «выше» или «ниже». Проблема в том, когда я выполняю это ...Фильтрация по args в Stored Proc

EXEC spBookByPrice 
@cat = 'business', @cutPrice = 0.00, @option = 'above' 

... У меня нет результатов, но @option = '' показывает все цены. Во всяком случае, вот мой код ....

ALTER PROC spBookByPrice 
@cat varchar(12), @cutPrice money, @option varchar(5) 
AS 
BEGIN 
    SELECT 
    title AS 'Title:', 
    type AS 'Category:', 
    price AS 'Price:', 
    CASE 
     WHEN price >= @cutPrice THEN 'above' 
     WHEN price < @cutPrice THEN 'below' 
     --ELSE NULL 
    END AS 'Option:' 
    FROM dbo.titles 
    WHERE 'Option:' LIKE '%' + @option + '%' 
    GROUP BY type, title, price 
    HAVING type LIKE '%' + @cat + '%' 
END 

ответ

2

Является ли это то, что вам нужно:

ALTER PROC spBookByPrice 
@cat varchar(12), @cutPrice money, @option varchar(5) 
AS 
BEGIN 
    SELECT 
    title AS [Title:], 
    type AS [Category:], 
    price AS [Price:], 
    CASE 
     WHEN price >= @cutPrice THEN 'above' 
     WHEN price < @cutPrice THEN 'below' 
     --ELSE NULL 
    END AS [Option:] 
    FROM dbo.titles 
    WHERE (CASE WHEN price >= @cutPrice THEN 'above' 
       WHEN price < @cutPrice THEN 'below' 
      --ELSE NULL 
      END) LIKE '%' + @option + '%' 
    GROUP BY type, title, price 
    HAVING type LIKE '%' + @cat + '%' 
END 
+0

Спасибо Gurwinder, именно то, что мне не хватает !!!! –

+0

Мне просто пришлось заменить псевдоним [Option:] на полный оператор CASE –

+0

@Kyle Exactly .. :) – GurV

0
select title [Title:], type [Category:], price [Price:], 
    [Option:] = iif(price >= @cutPrice, 'above', 'below') 
from titles 
where type like concat('%', @cat, '%') and (@option = '' 
    or (@option='below' and price < @cutPrice) 
    or (@option='above' and price >= @cutPrice)) 
Смежные вопросы