如何在简单的Select语句中使用可选的SQL where子句

时间:2018-03-27 21:48:23

标签: sql select conditional where-clause

我有一个存储过程,我需要在表中搜索所有结果(大多数时间),但有时我知道我正在寻找哪个结果集。

所以我在where子句中需要一个可选参数。如果参数包含在命令行中,则它将被设置,否则默认为0,并且我将整个范围设置为返回。

这很有效,但必须有一个更优雅的解决方案。

CREATE PROCEDURE [dbo].[GetItemDetails] 
    @itemId int = 0 
AS
BEGIN
    select * from myEntities
    where @itemId > (case when @itemId = 0 then @minId else @itemId - 1 end)
    and @itemId < (case when @itemId = 0 then @maxId else @itemId + 1 end)
END

2 个答案:

答案 0 :(得分:0)

这样的事情?不知道多少优雅&#39;它是。

select * from myEntities
where ((@ItemId = 0)OR(@ItemId <> 0 AND ItemId = @ItemId))

答案 1 :(得分:0)

这个更清洁:

select * from myEntities
where @itemId = 0 OR (itemId > @minId AND itemID < @maxId)