Я просто возвращаю значения на основе введенных параметров, если описание элемента равно null, я не хочу включать это в предложение where.Включить в предложение where, если значение не равно
Как и описание товара, все остальные случаи были такими же.
ALTER Procedure [dbo].[WP_GetItems]
@IsActive bit,
@OrderMode bit,
@OrderBy varchar(75),
@Description varchar(250),
@DateFrom datetime,
@DateTo datetime,
@PriceFrom float,
@PriceTo float
as
Begin
Select ItemID, ItemPartNumber, ItemDescription, CreatedDate, InitialPrice from Items where IsActive = @IsActive
CASE
WHEN @Description IS NOT NULL THEN AND ItemDescription LIKE '%' + @Description + '%'
WHEN @PriceFrom IS NOT NULL THEN AND InitialPrice >= @Price
WHEN @PriceTo IS NOT NULL THEN AND InitialPrice <= @Price
END
order by
CASE WHEN @OrderBy='ItemDescription' AND @OrderMode = 0 THEN ItemDescription END ASC,
CASE WHEN @OrderBy='ItemDescription' AND @OrderMode = 1 THEN ItemDescription END DESC,
CASE WHEN @OrderBy='ItemPartNumber' AND @OrderMode = 0 THEN ItemPartNumber END ASC,
CASE WHEN @OrderBy='ItemPartNumber' AND @OrderMode = 1 THEN ItemPartNumber END DESC,
CASE WHEN @OrderBy='CreatedDate' AND @OrderMode = 0 THEN CreatedDate END ASC,
CASE WHEN @OrderBy='CreatedDate' AND @OrderMode = 1 THEN CreatedDate END DESC,
CASE WHEN @OrderBy='InitialPrice' AND @OrderMode = 0 THEN InitialPrice END ASC,
CASE WHEN @OrderBy='InitialPrice' AND @OrderMode = 1 THEN InitialPrice END DESC
End
За выполнение этого запроса у меня есть ошибка. Incorrect syntax near the keyword 'CASE'.
Это потому, что вы не можете использовать инструкцию CASE. Вам необходимо использовать Dynamic SQL и выработать свою логику, прежде чем объединить предложение where. –
На самом деле, вам совсем не нужен оператор case. Просто сделайте 'where (@Description null или ItemDescription = @Description) и (@PriceFrom имеет значение null или Price> = @PriceFrom)' и т. Д. Кроме того, в качестве примечания обратите внимание, что 'case' может иметь только один возврат value - так что даже если это действительно работает (оно не может), оно не позволит вам выполнять поиск по нескольким полям за раз. – Luaan